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:
leecher1337
2017-12-03 23:25:35 +01:00
parent 4edb48ed17
commit c81d35f2ea
2 changed files with 3 additions and 1 deletions

View File

@@ -348,6 +348,7 @@ typedef struct {
int start_pos;
int offset;
int len;
int rc;
guint16 idx_starts[2000];
unsigned char cache_value[256];
} MdbIndexPage;

View File

@@ -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 (!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;
}
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);
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;
} while (!passed);