пятница, 2 апреля 2010 г.

SQLite index performance degradation tests

.schema
CREATE TABLE role
(
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  uid BLOB
);
CREATE INDEX role_uid_idx on role(uid);

Method
10 iterations of the 500 000 inserts:
insert into role (uid) values (uid)

uid=randomblob(1)
$ ./test.tcl
1 7 seconds per iteration
2 7 seconds per iteration
3 7 seconds per iteration
4 7 seconds per iteration
5 7 seconds per iteration
6 7 seconds per iteration
7 7 seconds per iteration
8 7 seconds per iteration
9 7 seconds per iteration
10 7 seconds per iteration

uid=randomblob(8)
$ ./test.tcl
1 7 seconds per iteration
2 8 seconds per iteration
3 9 seconds per iteration
4 10 seconds per iteration
5 11 seconds per iteration
6 12 seconds per iteration
7 13 seconds per iteration
8 13 seconds per iteration
9 14 seconds per iteration
10 15 seconds per iteration


uid=randomblob(16)
$ ./test.tcl
1 7 seconds per iteration
2 10 seconds per iteration
3 12 seconds per iteration
4 14 seconds per iteration
5 18 seconds per iteration
6 44 seconds per iteration
7 118 seconds per iteration
8 206 seconds per iteration
9 215 seconds per iteration
10 404 seconds per iteration

uid=hex(randomblob(16))
$ ./test.tcl
1 9 seconds per iteration
2 12 seconds per iteration
3 23 seconds per iteration
4 139 seconds per iteration
5 280 seconds per iteration
6 501 seconds per iteration
7 632 seconds per iteration
8 779 seconds per iteration
9 898 seconds per iteration
10 957 seconds per iteration

uid=[clock clicks]
$ ./test.tcl
1 7 seconds per iteration
2 7 seconds per iteration
3 7 seconds per iteration
4 7 seconds per iteration
5 7 seconds per iteration
6 7 seconds per iteration
7 7 seconds per iteration
8 7 seconds per iteration
9 7 seconds per iteration
10 7 seconds per iteration

uid="1234567890abcdef"
$ ./test.tcl
1 6.2 seconds per iteration
2 6.5 seconds per iteration
3 6.5 seconds per iteration
4 6.6 seconds per iteration
5 6.6 seconds per iteration
6 6.6 seconds per iteration
7 6.6 seconds per iteration
8 6.6 seconds per iteration
9 6.6 seconds per iteration
10 6.7 seconds per iteration

uid=random()
$ ./test.tcl
1 6 seconds per iteration
2 7 seconds per iteration
3 8 seconds per iteration
4 9 seconds per iteration
5 10 seconds per iteration
6 11 seconds per iteration
7 11 seconds per iteration
8 12 seconds per iteration
9 13 seconds per iteration
10 14 seconds per iteration

2 комментария:

ac комментирует...

Если привести и размеры полученных БД, то будет лучше видна корреляция замедления с размером.

Печников Алексей комментирует...

Размер БД слабо коррелирован с падением скорости вставки. В основном все определяется селективностью индекса - чем больше вариантов значения индексируемого поля, тем хуже производительность, а вставка большого низкоселективного ключа работает эффективно.


(C) Alexey Pechnikov aka MBG, mobigroup.ru