Итак, у меня есть огромная база данных с 40 миллионами записей.
запрос простой (a_view - это представление!)
select * from a_view where id > x LIMIT 10000
это поведение, которое я получаю:х - это небольшое число (int), запрос очень быстрый.когда x> 29 миллионов запрос начинает занимать минуты.если это ближе к 30 миллионам, это займет несколько часов.и так далее ...
почему это так?что я могу сделать, чтобы избежать этого?
Я использую InnoDB в качестве движка, таблицы имеют индексы.
значение лимита является критическим, оно влияет на производительность.если он маленький, запрос всегда быстрый.но если x близко к 30 миллионам, тогда мне нужно быть очень осторожным, чтобы установить его не слишком большим (менее 300 сотен), и все же он довольно медленный, но не вечный
Если вам нужно большедетали, не стесняйтесь спрашивать.
РЕДАКТИРОВАТЬ: вот объяснение
+----+-------------+-------+--------+-----------------+---------+---------+---------------------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-----------------+---------+---------+---------------------+---------+-------------+
| 1 | SIMPLE | aH | index | PRIMARY | PRIMARY | 39 | NULL | 3028439 | Using index |
| 1 | SIMPLE | a | eq_ref | PRIMARY | PRIMARY | 4 | odb.aH.albumID | 1 | Using where |
| 1 | SIMPLE | aHT | ref | PRIMARY,albumID | albumID | 4 | odb.a.albumID | 4 | |
| 1 | SIMPLE | t | eq_ref | PRIMARY | PRIMARY | 4 | odb.aHT.id | 1 | Using where |
| 1 | SIMPLE | g | eq_ref | PRIMARY | PRIMARY | 4 | odb.t.genre | 1 | |
| 1 | SIMPLE | ar | eq_ref | PRIMARY | PRIMARY | 4 | odb.t.artist | 1 | |
+----+-------------+-------+--------+-----------------+---------+---------+---------------------+---------+-------------+