Оптимизация запросов MySQL - PullRequest
0 голосов
/ 14 мая 2011

У меня запрос на соединение, который, кажется, загружается медленно. Как я могу оптимизировать это, или это разумно?

время выполнения
Всего 29, запрос занял 1.6956 сек

MySQL запрос

SELECT SQL_CALC_FOUND_ROWS
  t2.AuctionID ,t2.product_name ,t3.user_name ,t1.date_time ,t1.owned_price
  ,t2.specific_product_id
FROM table_user_ownned_auction AS t1 
INNER JOIN table_product AS t2 ON t1.specific_product_id=t2.specific_product_id
INNER JOIN table_user_information AS t3 ON t3.user_id=t1.user_id  
ORDER BY ownned_id DESC

Вот вывод объяснения

Explain output

Ответы [ 3 ]

0 голосов
/ 14 мая 2011

Глядя на вывод объяснения, ваша проблема в Explain output

Вторая строка: объединение с таблицей t1.
Поместите индекс на t1.specific_product_id и t2.specific_product_id.

в первой строке 3 строки, using filesort на самом деле быстрее, чем при использовании индекса, поскольку экономит время ввода-вывода.

Следующий код добавит индекс к t2.specific_product_id.

ALTER TABLE table_product ADD INDEX spi(specific_product_id); 

Поскольку у вас есть только 29 строк вывода, использование индекса должно ускорить ваш запрос до мгновенного.

0 голосов
/ 18 апреля 2017

Посмотрев на таблицу объяснения, напечатайте все, что очень плохо, если в вашей таблице более 10 000 строк. Я настоятельно рекомендую проиндексировать этот столбец в вашей таблице

  1. t1.specific_product_id
  2. t2.specific_product_id
  3. t3.user_id
  4. t1.user_id

Если ваша таблица достигнет 10 000 строк, вы должны бытьв состоянии видеть повышение производительности.Для получения дополнительной информации, пожалуйста, это видео с 00:00 до 02:04 минут. Как вы можете в следующем видео, прежде чем индексировать запрос, нужно искать более 90000 строк данных, а после индекса он будет искать менее 5 строк данных.это поможет.

https://www.youtube.com/edit?o=U&video_id=ojyEcNMAj8k

0 голосов
/ 14 мая 2011

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

EXPLAIN SELECT SQL_CALC_FOUND_ROWS
  ,t2.AuctionID ,t2.product_name ,t3.user_name ,t1.date_time ,t1.owned_price
  ,t2.specific_product_id
FROM table_user_ownned_auction AS t1 inner
JOIN table_product AS t2 ON t1.specific_product_id=t2.specific_product_id
INNER JOIN table_user_information AS t3 ON t3.user_id=t1.user_id  
ORDER BY ownned_id DESC

Он расскажет вам важную информацию о вашем запросе. Наиболее важными столбцами являются «ключ» и «дополнительный».

Если «ключ» равен NULL, вам нужен индекс. В основном для столбцов, которые используются в операторах WHERE или GROUP BY или ORDER BY. «Extra» сообщает вам о ресурсоемких (CPU или Memory) операциях.

Итак, добавьте индекс для «ownned_id» (который, как я предполагаю, должен быть «ведомый_идентификатор») и объясните это снова. Тогда посмотрите на прирост производительности.

Если у вас есть проблемы, я могу помочь вам лучше, если вы вставите вывод EXPLAIN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...