diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable/data/read_rows_query.py b/packages/google-cloud-bigtable/google/cloud/bigtable/data/read_rows_query.py index 9fd42e2d871a..97bff7f3a478 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable/data/read_rows_query.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable/data/read_rows_query.py @@ -349,7 +349,12 @@ def add_range( Args: row_range: a range of row keys to add to this query """ - if row_range not in self.row_ranges: + # Check against a set of string signatures to avoid O(n^2) wrapper reconstruction + if not hasattr(self, "_range_signatures"): + self._range_signatures = set(str(RowRange._from_pb(r)) for r in self._row_set.row_ranges) + signature = str(row_range) + if signature not in self._range_signatures: + self._range_signatures.add(signature) self._row_set.row_ranges.append(row_range._pb) def shard(self, shard_keys: RowKeySamples) -> ShardedQuery: