Mysql Огромные таблицы, проблемы с медленным счетчиком (*) - PullRequest
0 голосов
/ 06 мая 2020

У меня есть большая таблица с 4м строками. У меня очень хорошая машина с большим объемом памяти (16 ГБ и 12 процессоров). Данные меняются каждые несколько часов и все в одно и то же время.

У меня есть таблица с именем «враг», и одно из полей - мощность, то есть поле BIG INT (64 бита) с индексом.

У меня есть простой поиск, чтобы определить позицию на основе мощности

SELECT count(*) FROM enemy WHERE Power>value

Когда value является одним из более высоких значений, он быстро вычисляет количество элементов .... когда Power является одним из последних значения, поиск значения во много раз медленнее. мгновенно или почти мгновенно.

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

3 примера запросов со временем и возвращенная позиция:

"Select count(*) as n FROM Enemies WHERE Power > 900000000" 0.0053 seconds (Position 29654) 
"Select count(*) as n FROM Enemies WHERE Power > 100000000"  0.1089 seconds (Position 706266)
"Select count(*) as n FROM Enemies WHERE Power > 1900000"  0.3360 seconds (Position 2192063)

1 Ответ

0 голосов
/ 06 мая 2020

Вы можете несколько улучшить производительность с помощью индекса на enemy(power). Индекс будет сканироваться вместо страниц данных.

Кроме того, order by не имеет смысла в запросе, возвращающем одну строку. Фактически, он должен выдать синтаксическую ошибку.

...