mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-09-19 10:37:54 +08:00
Optimization: Assuming that the index is sorted, I guess an index search can bail out as soon as target value has been found?
This commit is contained in:
@@ -348,6 +348,7 @@ typedef struct {
|
|||||||
int start_pos;
|
int start_pos;
|
||||||
int offset;
|
int offset;
|
||||||
int len;
|
int len;
|
||||||
|
int rc;
|
||||||
guint16 idx_starts[2000];
|
guint16 idx_starts[2000];
|
||||||
unsigned char cache_value[256];
|
unsigned char cache_value[256];
|
||||||
} MdbIndexPage;
|
} MdbIndexPage;
|
||||||
|
@@ -755,7 +755,7 @@ mdb_index_find_next(MdbHandle *mdb, MdbIndex *idx, MdbIndexChain *chain, guint32
|
|||||||
*/
|
*/
|
||||||
if (!mdb_index_find_next_on_page(mdb, ipg)) {
|
if (!mdb_index_find_next_on_page(mdb, ipg)) {
|
||||||
if (!chain->clean_up_mode) {
|
if (!chain->clean_up_mode) {
|
||||||
if (!(ipg = mdb_index_unwind(mdb, idx, chain)))
|
if (ipg->rc==1 || !(ipg = mdb_index_unwind(mdb, idx, chain)))
|
||||||
chain->clean_up_mode = 1;
|
chain->clean_up_mode = 1;
|
||||||
}
|
}
|
||||||
if (chain->clean_up_mode) {
|
if (chain->clean_up_mode) {
|
||||||
@@ -798,6 +798,7 @@ mdb_index_find_next(MdbHandle *mdb, MdbIndex *idx, MdbIndexChain *chain, guint32
|
|||||||
|
|
||||||
//idx_start = ipg->offset + (ipg->len - 4 - idx_sz);
|
//idx_start = ipg->offset + (ipg->len - 4 - idx_sz);
|
||||||
passed = mdb_index_test_sargs(mdb, idx, (char *)(ipg->cache_value), idx_sz);
|
passed = mdb_index_test_sargs(mdb, idx, (char *)(ipg->cache_value), idx_sz);
|
||||||
|
if (passed) ipg->rc=1; else if (ipg->rc) return 0;
|
||||||
|
|
||||||
ipg->offset += ipg->len;
|
ipg->offset += ipg->len;
|
||||||
} while (!passed);
|
} while (!passed);
|
||||||
|
Reference in New Issue
Block a user