- Querycache отключен!
- Индексы загружены на 100% в ОЗУ
- индекс только ID
1benchmark:
"SELECT title FROM posts LIMIT ?, 15";
? = rand(1,183655);
EXPLAIN
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE posts ALL NULL NULL NULL NULL 183637
после выполнения 100 циклов это заняло более 100 секунд.
2Benchmark:
"SELECT title FROM posts WHERE id = 78845 OR id = 158738 OR id = 57065 OR id = 146797 OR id = 78918 OR id = 65227 OR id = 117987 OR id = 92541 OR id = 39782 OR id = 1958 OR id = 180384 OR id = 170758 OR id = 102227 OR id = 180223 OR id = 46391";
in each loop every id is generated via rand(1,183655);
после выполнения 100 циклов для завершения потребовалось 6 секунд, и он использует первичный ключ.
Проблема, я думаю, в LIMIT MySQL не использует первичный ключ для id .
После повторного тестирования с Limit:
SECONDS: LOOPS: SQL:
41.560034990311 = 30 = "SELECT title FROM posts LIMIT ?, 15";
36.302664995193 = 30 = "SELECT title FROM posts ORDER BY id LIMIT ?, 15";
70.335160970688 = 30 = "SELECT title FROM posts ORDER BY id ASC LIMIT ?, 15";
48.453547000885 = 30 = "SELECT id, title FROM posts LIMIT ?, 15"
Как-то, но я не 100% уверен . Я обновил свой VMware PHP5.1.6 до PHP5.3 с тех пор, как заметил, что эти запросы LIMIT занимают больше времени.