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.
Commit
78e10da0e6513b25daab7c578762e7832fa2e01f
Parent
326979358d6db31…
1 file changed
+5
-1
+5
-1
| --- src/rebuild.c | ||
| +++ src/rebuild.c | ||
| @@ -370,11 +370,15 @@ | ||
| 370 | 370 | " WHERE rid IN (SELECT rid FROM shun JOIN blob USING(uuid))" |
| 371 | 371 | ); |
| 372 | 372 | db_multi_exec( |
| 373 | 373 | "DELETE FROM config WHERE name IN ('remote-code', 'remote-maxid')" |
| 374 | 374 | ); |
| 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"); | |
| 376 | 380 | incrSize = totalSize/100; |
| 377 | 381 | totalSize += incrSize*2; |
| 378 | 382 | db_prepare(&s, |
| 379 | 383 | "SELECT rid, size FROM blob /*scan*/" |
| 380 | 384 | " WHERE NOT EXISTS(SELECT 1 FROM shun WHERE uuid=blob.uuid)" |
| 381 | 385 |
| --- 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 |