Почему MySQL Query работает медленно, хотя объяснение в заявлении говорит об обратном? - PullRequest
0 голосов
/ 27 марта 2019

Это мой запрос

SELECT 
    id
FROM
    `MyTable`
WHERE
    `env` = 'default'
        AND (`HTML` = '' OR `HTML` IS NULL)
order by `id` desc 
limit 100;

При выполнении объяснения я получу:

Possible keys: idx_env  (related to env field in where clause)
Key: id
Key length: 4
Rows: 200
Filtered: 9.50
Extra: using where

Из приведенного выше объяснения я понимаю, что mySQL будет проверять 200 записей.И у меня не должно быть больших проблем с производительностью

Но я часто сталкиваюсь с медленным запросом в 50 ", фактически активируя медленный журнал запросов в моем кластере Aurora, я вижу следующий отчет:

 # Query_time: 49.512712 Lock_time: 0.000065 Rows_sent: 28 Rows_examined: 6795665

Похоже, что нет последовательной обратной связи: из объясненных строк по 200 записей из всех журналов ...

РЕДАКТИРОВАТЬ

поля env и id уже заполненыИндексируется. HTML не индексируется намеренно, потому что это тип LONGTEXT

, также я хотел бы добавить, что иногда при выполнении запроса в рабочей среде он отвечает очень быстро, как и ожидалось, но часто для его выполнения требуется около 50 ".... и я немного смущен этим

1 Ответ

0 голосов
/ 27 марта 2019

Я не знаю, какой фактический индекс вы использовали здесь, но это, вероятно, индекс, который улучшит производительность вашего запроса:

CREATE INDEX idx ON MyTable (env, HTML, id);

Это позволит MySQL эффективно отфильтровывать совпадения в WHERE предложение, используя оба поля.И этот индекс также охватывает id, который вы выбираете и который также используется для сортировки.Обратите внимание, если id является первичным ключом, и вы используете механизм InnoDB, вы можете упростить индекс до следующего:

CREATE INDEX idx ON MyTable (env, HTML);
...