MySQL SELECT .. WHERE .. ORDER BY ... LIMIT 1000000,10 производительность - PullRequest
0 голосов
/ 22 января 2020

У меня есть следующая таблица Innodb с ~ 2.500.000 строк:

ID | param1 | param2 | param3 | param4 | sort_field1 | sort_field2 | sort_field3 | sort_field4

ID - int, PK
param1-4 - tinyint(1), INDEX (it has only 0 OR 1 value)
sort_field1-4 - int, INDEX (it could be any number in INT range)

Каждый параметр (1-4) имеет распределение значений около 40% от 0 и 60 % 1.

Я пытаюсь оптимизировать выборку строк из середины таблицы в этом супер простом запросе:

SELECT id FROM table WHERE param1=0 ORDER BY sort_field1 LIMIT 1000000,10

Потребовалось около 1.7se c, чтобы получить 10 строки и EXPLAIN показывают, что используется только индекс param1.

Я могу создать индекс (param1, sort_field1), и это сократит время до 0,17se c, но я не могу создать индексы для каждого и каждого комбинация params и sort_field.

Можно ли оптимизировать этот запрос и / или таблицу для достижения времени, аналогичного тому, которое я получил с комбинированным индексом?

...