|
Тест на бази данни. PostgreSQL срещу MySQL |
|
Понеделник, 28 Септември 2009 13:08 |
|
Това е тест за производителност на три от най-използваните бази данни MySQL, PostgreSQL и SQLite SQLite е използвана само за да ни покаже колко по добре могат да стоят нещата :)
ВНИМАНИЕ: Тестът е направен с базовата инсталация на всяка една от базите. Никакви допълнителни оптимизации не са правени. Знаем добре, че ако си бяхме направили труда на ги оптимизираме щяхме да постигнем много по добри резултати, но не това е целта на този тест.
Тестът е направен на 7.2-STABLE FreeBSD 7.2-STABLE amd64 Версиите на базите са:
PostgreSQL 8.4.0 MySQL 5.0.86 SQLite3 3.6.14.2
Структурата на таблица perf е следната: CREATE TABLE `perf` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL default '', PRIMARY KEY (`id`) ) ЗАБЕЛЕЖКА: В MySQL таблицата е сетната на тип MyISAM. В PostgreSQL няма типове на таблиците.
1. Първо изпълнихме 999999 INSERT заявки. Пример: INSERT INTO perf (name) VALUES (i) Където i е инкрементална стойност със някакъв префикс
PosgreSQL start time 2009-09-25 16:42:05 PosgreSQL end time 2009-09-25 16:55:45
MySQL start time 2009-09-25 16:55:45 MySQL end time 2009-09-25 16:57:21
SQLite start time 2009-09-25 17:19:57 SQLite end time 2009-09-25 17:20:39
2. Втората стъпка беше да обходим всички записи и да обновим всеки от тях със различен от стария префикс Example: UPDATE perf SET name = 'a_i' WHERE id = i Където i е инкременталнo цяло число
PosgreSQL start time 2009-09-28 12:34:12 PosgreSQL end time 2009-09-28 12:49:35
MySQL start time 2009-09-28 12:54:42 MySQL end time 2009-09-28 12:56:53
SQLite start time 2009-09-28 13:02:20 SQLite end time 2009-09-28 13:03:15
3. Третата стъпка беше да направин 300 SELECT заявки, селектирайки случаен брой редове между случайни ид-та. Пример: SELECT * FROM perf WHERE id > [random_start] AND id < [random_end] Където random_start < random_end и обхватът е винаги в съществуващи редове от таблицата
PosgreSQL start time 2009-09-29 09:30:01 PosgreSQL end time 2009-09-29 09:35:09
MySQL start time 2009-09-28 15:42:56 MySQL end time 2009-09-28 15:46:42
Intresesting! Nothing to say about that. We can't check it with only 300 queries ... Интересно! Няма какво да кажем за SQLite. Не можем да го проверим само с някакви си 100 заявки ... SQLite start time 2009-09-28 15:46:42 SQLite end time 2009-09-28 15:46:42
... затова го направихме с 100000 заявки :) SQLite start time 2009-09-28 15:48:20 SQLite end time 2009-09-28 15:48:35
Можете да свалите тест кода написан на python тук |