Тормозной SQLite? Совсем нет!

Эта статья была запощена на хабрахабр до появления этого блога. А теперь она обрела свой дом.

Как-то заинтересовавшись SQLite я решил проверить, а не будет ли оно быстрее MySQL, или хотя бы равным по скорости.

Я исходил из того, что SQLite скорее всего будет удобна для мелких таблиц, типа простых счетчиков посещений.
Поэтому провел тесты следующим способом: я пять раз мерял время по 100 циклов обновления записи в базе и пять раз по 100 чтения.

Код тут.

Итак, в статье убеждали: “В последнее время, вы, возможно, слышали о новом расширении для PHP: SQLite. Есть много причин, по которым SQLite может показаться лучшим достижением с тех пор, как научились резать хлеб. SQLite предлагает добротный SQL интерфейс к нерелятивистской базе данных и создаёт элегантную альтернативу громоздким интерфейсам других баз данных без потери функциональности или скорости, как можно было бы ожидать.”.

Смотрим что же получилось по тестам…
SQLite ………………….. MySQL
Запись
0.45911908149719 0.031841039657593
0.46412396430969 0.031555891036987
0.49027895927429 0.029323101043701
0.46884489059448 0.029382944107056
0.50253915786743 0.028644800186157
Среднее
0.47698121070862 0.030149555206299

Чтение
0.026177883148193 0.060520172119141
0.026360988616943 0.059216022491455
0.026273012161255 0.062637090682983
0.026113986968994 0.062775135040283
0.026944160461426 0.062674045562744
Среднее
0.026374006271362 0.061564493179321

Удивительный провал на запись и преимущество в чтении. Однако спасибо ptalus , который пролил свет на это дело. В мануале написано, что для каждой записи файл открывается-закрывается, что и влечет за собой такую тормознутость, однако стоит добавить

sqlite_query($dbhandle, ‘BEGIN;’);
sqlite_query($dbhandle, ‘COMMIT;’);

вокруг запроса и время записи просто магически меняется.

Запись:
0.014724016189575
0.014418125152588
0.015676975250244
0.014610052108765
0.014219999313354
Среднее:
0.014729833602905

Источник

Комментарии отключены