On Wed, 30 May 2007 15:18:18 -0400, John Elrick wrote
snip
After running a simple test, I confirmed a suspicion. VACUUM
doesn't reorder the ROWIDs, so you still have breaks.
My tests show otherwise:
[alex]# cat 01_vacuum_table_test.sql
CREATE TABLE foo (
string varchar(1) not null
);
INSERT INTO foo (string) VALUES ('a');
INSERT INTO foo (string) VALUES ('b');
INSERT INTO foo (string) VALUES ('c');
INSERT INTO foo (string) VALUES ('d');
[alex]# sqlite3 foo.db 01_vacuum_table_test.sql
[alex]# sqlite3 --header --column foo.db SELECT rowid,* FROM foo
rowid string
-- --
1 a
2 b
3 c
4 d
[alex]# sqlite3 --header --column foo.db DELETE FROM foo WHERE rowid = 2
[alex]# sqlite3 --header --column foo.db DELETE FROM foo WHERE rowid = 4
[alex]# sqlite3 --header --column foo.db SELECT rowid,* FROM foo
rowid string
-- --
1 a
3 c
[alex]# sqlite3 --header --column foo.db VACUUM
[alex]# sqlite3 --header --column foo.db SELECT rowid,* FROM foo
rowid string
-- --
1 a
2 c
did I do something incorrectly?
Two suggestions:
1. If the image data are fairly stable, copy the table to a new
table so as to eliminate the breaks in the ROWIDs.
2. If the table is relatively small, load all the potential ids
into memory as a list and select randomly from the list.
The table is small now, but expected to grow considerably to over a million
rows. I coded a random selector from an array at the application level, and it
works, but it will degrade dramatically over time.
Thanks,
Alex
-
To unsubscribe, send email to [EMAIL PROTECTED]
-