Fossil SCM

Improve the performance of rebuild by using max(rid) instead of count(*) as a good approximation for the amount of work to be done.

drh 2011-10-31 11:46 trunk
Commit 78e10da0e6513b25daab7c578762e7832fa2e01f
1 file changed +5 -1
+5 -1
--- src/rebuild.c
+++ src/rebuild.c
@@ -370,11 +370,15 @@
370370
" WHERE rid IN (SELECT rid FROM shun JOIN blob USING(uuid))"
371371
);
372372
db_multi_exec(
373373
"DELETE FROM config WHERE name IN ('remote-code', 'remote-maxid')"
374374
);
375
- totalSize = db_int(0, "SELECT count(*) FROM blob");
375
+
376
+ /* The following should be count(*) instead of max(rid). max(rid) is
377
+ ** an adequate approximation, however, and is much faster for large
378
+ ** repositories. */
379
+ totalSize = db_int(0, "SELECT max(rid) FROM blob");
376380
incrSize = totalSize/100;
377381
totalSize += incrSize*2;
378382
db_prepare(&s,
379383
"SELECT rid, size FROM blob /*scan*/"
380384
" WHERE NOT EXISTS(SELECT 1 FROM shun WHERE uuid=blob.uuid)"
381385
--- src/rebuild.c
+++ src/rebuild.c
@@ -370,11 +370,15 @@
370 " WHERE rid IN (SELECT rid FROM shun JOIN blob USING(uuid))"
371 );
372 db_multi_exec(
373 "DELETE FROM config WHERE name IN ('remote-code', 'remote-maxid')"
374 );
375 totalSize = db_int(0, "SELECT count(*) FROM blob");
 
 
 
 
376 incrSize = totalSize/100;
377 totalSize += incrSize*2;
378 db_prepare(&s,
379 "SELECT rid, size FROM blob /*scan*/"
380 " WHERE NOT EXISTS(SELECT 1 FROM shun WHERE uuid=blob.uuid)"
381
--- src/rebuild.c
+++ src/rebuild.c
@@ -370,11 +370,15 @@
370 " WHERE rid IN (SELECT rid FROM shun JOIN blob USING(uuid))"
371 );
372 db_multi_exec(
373 "DELETE FROM config WHERE name IN ('remote-code', 'remote-maxid')"
374 );
375
376 /* The following should be count(*) instead of max(rid). max(rid) is
377 ** an adequate approximation, however, and is much faster for large
378 ** repositories. */
379 totalSize = db_int(0, "SELECT max(rid) FROM blob");
380 incrSize = totalSize/100;
381 totalSize += incrSize*2;
382 db_prepare(&s,
383 "SELECT rid, size FROM blob /*scan*/"
384 " WHERE NOT EXISTS(SELECT 1 FROM shun WHERE uuid=blob.uuid)"
385

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button