diff --git a/src/tsdb/src/tsdbReadImpl.c b/src/tsdb/src/tsdbReadImpl.c index f2678c627fa61aff227ae61749d2ed76ef5e2db8..ea4064a72e5648302310341be7c178674b95a1bc 100644 --- a/src/tsdb/src/tsdbReadImpl.c +++ b/src/tsdb/src/tsdbReadImpl.c @@ -172,12 +172,9 @@ int tsdbSetReadTable(SReadH *pReadh, STable *pTable) { size_t size = taosArrayGetSize(pReadh->aBlkIdx); if (size > 0) { - while (true) { - if (pReadh->cidx >= size) { - pReadh->pBlkIdx = NULL; - break; - } - + size_t left = 0, right = size - 1; + while (left <= right) { + pReadh->cidx = (int)((left + right) / 2); SBlockIdx *pBlkIdx = taosArrayGet(pReadh->aBlkIdx, pReadh->cidx); if (pBlkIdx->tid == TABLE_TID(pTable)) { if (pBlkIdx->uid == TABLE_UID(pTable)) { @@ -185,15 +182,18 @@ int tsdbSetReadTable(SReadH *pReadh, STable *pTable) { } else { pReadh->pBlkIdx = NULL; } - pReadh->cidx++; - break; - } else if (pBlkIdx->tid > TABLE_TID(pTable)) { - pReadh->pBlkIdx = NULL; + break; + } else if (pBlkIdx->tid < TABLE_TID(pTable)) { + left = pReadh->cidx + 1; } else { - pReadh->cidx++; + right = pReadh->cidx - 1; } } + + if (left > right) { + pReadh->pBlkIdx = NULL; + } } else { pReadh->pBlkIdx = NULL; }