Mysql
 sql >> база данни >  >> RDS >> Mysql

Бавна MySQL заявка

Вие просто питате за две колони в заявката си, така че индексите могат/трябва да отидат там:

  • Дата и час
  • Време на зареждане

Друг начин за ускоряване на вашата заявка може да бъде разделяне на полето DateTime на две:дата и час.
По този начин db може да групира директно в полето за дата, вместо да изчислява ДАТА(...).

РЕДАКТИРАНО:
Ако предпочитате да използвате тригер, създайте нова колона (DATE) и я наречете newdate , и опитайте с това (не мога да го пробвам сега, за да видя дали е правилно):

CREATE TRIGGER upd_check BEFORE INSERT ON SpeedMonitor
FOR EACH ROW
BEGIN
  SET NEW.newdate=DATE(NEW.DateTime);
END

РЕДАКТИРАНО ОТНОВО:
Току-що създадох db със същата таблица speedmonitor, пълна с около 900 000 записа.
След това изпълнявам заявката SELECT newdate,AVG(LoadTime) loadtime FROM speedmonitor GROUP BY newdate и отне около 100 секунди!!
Премахване на индекс в полето newdate (и изчистване на кеша с помощта на НУЛИРАНЕ НА КЕШ НА ЗАЯВКАТА и FLUSH TABLES ), същата заявка отне 0,6 секунди!!!
Само за сравнение:заявка ИЗБЕРЕТЕ ДАТА(DateTime),AVG(LoadTime) време за зареждане ОТ speedmonitor ГРУПА ПО ДАТА(DateTime) отне 0,9 сек.
Така че предполагам, че индексът на newdate не е добър:премахнете го.
Ще добавя колкото мога повече записи сега и ще тествам отново две заявки.

ОКОНЧАТЕЛНА РЕДАКТИРАНЕ:
Премахване на индекси в колони newdate и DateTime, като има 8 милиона записа на таблицата speedmonitor, ето резултати:

  • избиране и групиране по колона с нова дата:7,5 сек.
  • избиране и групиране в поле DATE(DateTime):13.7s

Мисля, че това е добро ускоряване.
Отнема време за изпълнение на заявка в командния ред на mysql.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Малко съвети относно Cassandra срещу MySQL

  2. Използване на php за връщане на стойности GROUP_CONCAT('column x').

  3. MySQL ON UPDATE CURRENT_TIMESTAMP не се актуализира

  4. MySQL заявката със SUM() не връща очакваните резултати

  5. Нуждаете се от помощ за оптимизиране на географско търсене по ширина/дълга за mysql