Сгруппировать, упорядочить и подсчитать производительность MySQL - PullRequest
0 голосов
/ 04 июля 2019

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

Этот запрос занимает 12 секунд для выполнения более 100 000 строк. Я думаю, что это выполнение занимает слишком много времени, поэтому я ищу способ оптимизировать запрос.

Я запустил команду объяснения SQL на PHPMyAdmin и получил следующее: [! [введите описание изображения здесь] [1]] [1]

В соответствии с этим основная проблема связана с таблицей p, которая сканирует всю таблицу, но как я могу это исправить? Идентификатор таблицы p является первичным ключом. Нужно ли устанавливать его также в качестве индекса? Кроме того, что еще я могу сделать, чтобы запрос выполнялся быстрее?

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Вы можете установить связь между двумя таблицами. https://database.guide/how-to-create-a-relationship-in-mysql-workbench/

Кроме этого, вы также можете использовать левое соединение, чтобы не загружать всю правую таблицу. Упорядочить по является медленной функцией в MySQL, если вы используете код впоследствии, вы можете просто сделать это в коде, который намного быстрее, чем упорядочить по.

Я надеюсь, что помог, и Сообщество не стесняйтесь редактировать:)

0 голосов
/ 04 июля 2019

Вы включили план объяснения, но не предоставили никакой информации о структуре таблицы, распределении данных, количестве элементов и объемах. Предполагая, что ваши индексы точны, и вы имеете равномерное распределение данных, запрос должен обработать более 12 миллионов строк, а не 100 000. Но даже тогда это относительно плохая производительность. Но вы никогда не говорили нам, на каком оборудовании это находится, ни фоновой загрузке.

Запрос с таким количеством объединений всегда будет медленным - нужны ли они все?

основная проблема - в таблице p, которая сканирует всю таблицу

Полное сканирование таблицы не является плохим автоматически. Стоимость разыменования поиска индекса в отличие от потокового чтения примерно в 20 раз больше. Поскольку единственным ограничением, которое вы применяете к этой таблице, является ее объединение с другими таблицами, в вопросе, который вы задали, нет ничего, что указывало бы на то, что есть много возможностей для улучшения этого.

...