Как остановить LIMIT от замедления запроса?
Я создал тестовую таблицу с 100k строк в ней. Время выполнения этого запроса:
SELECT id FROM table
Является 0.032s
, Если я добавлю GROUP BY
оператор для целочисленного столбца, который проиндексирован как Normal,BTREE
Время выполнения запроса:
SELECT id FROM table GROUP BY indexedColumn
ОБЪЯСНИТЬ вывод:
id | select_type | table | type | possible keys | key | key_len | ref | rows | Extra
1 SIMPLE [table] All [indexedColumnKey] null null null 105416 Using temporary; Using filesort
Является 0.073s
, Время выполнения удвоилось из-за GROUP BY
, но я предполагаю, что это нормально? У меня вопрос, почему добавление LIMIT
на запрос, как это:
SELECT id FROM table GROUP BY indexedColumn LIMIT 500
ОБЪЯСНИТЬ вывод:
id | select_type | table | type | possible keys | key | key_len | ref | rows | Extra
1 SIMPLE [table] index [indexedColumnKey] [indexedColumnKey] 5 null 500 null
Увеличивает время выполнения до 0.301s
? Это замедление более чем в 4 раза.
Я очень неопытен в SQL, так что, возможно, это совершенно нормально, но мне кажется странным, что ограничение числа возвращаемых строк сильно замедляет запрос.
Вопросы:
- Это нормально?
- Есть ли способ, чтобы остановить LIMIT так сильно замедлить запрос?
1 ответ
Запрос SELECT id FROM table GROUP BY indexedColumn
не использует индекс. Это показано в вашем объяснении. Но когда вы используете лимит, используется индекс. Также для экспериментов вы можете отключить кеш используя SQL_NO_CACHE SELECT SQL_NO_CACHE ....