Имеется большая таблица, в которой около 3млн строк. Все индексы проставлены верно. Но они уже не спасают, т.к. запрос подобный этому:
SELECT a.id, a.title, a.body FROM articles a WHERE a.isDeleted=0 AND a.isReady=1 AND a.id IN (1,2,3,4,5,6,7)
после перезагрузки сервера выполняется около секунды.
Так же в эту таблицу каждый день добавляется примерно по 1000 новых записей.
Что можно сделать для увеличения скорости выборки?
Вот реальный запрос, который выполняется:
SELECT a.ID FROM articles a WHERE a.ID IN (244420, 244568, 290772, 440668, 483669, 515012, 536432, 581513, 1096597, 1465361, 1801110, 1950167, 2101815, 2337877, 2960983, 2963083, 2968763, 2971218, 2971692, 2976138, 2978343, 2979835, 2982769, 2985508, 2997775, 3005673, 3009886, 3010798, 3013842, 3014869, 3021023, 3025274, 3028399, 3029632, 3037355, 3040442, 3051786, 3053527, 3059715, 3065847, 3072606, 3088423, 3095432, 3096762, 3119841, 3121399, 3131721, 3149442, 3160328) AND Ready = TRUE AND IsDeleted = FALSE ORDER BY a.ID DESC LIMIT 42;
EXPLAIN:
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
| 1 | SIMPLE | a | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 49 | 1.00 | Using where |
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+