Как остановить 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, так что, возможно, это совершенно нормально, но мне кажется странным, что ограничение числа возвращаемых строк сильно замедляет запрос.

Вопросы:

  1. Это нормально?
  2. Есть ли способ, чтобы остановить LIMIT так сильно замедлить запрос?

1 ответ

Запрос SELECT id FROM table GROUP BY indexedColumn не использует индекс. Это показано в вашем объяснении. Но когда вы используете лимит, используется индекс. Также для экспериментов вы можете отключить кеш используя SQL_NO_CACHE SELECT SQL_NO_CACHE ....

Другие вопросы по тегам