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

Множество MYSQL заявки в таблица с множество колони

Добре, изглежда, че оптимизаторът на заявки има някои проблеми с предишния ми отговор с големи таблици. Вместо това опитайте това решение, то работи със зависими подзаявки:

SELECT DATE_FORMAT(timeTable.minuteTime, '%Y-%m-%d %k:%i') time,
T2.temp temp,
S2.solids solids,
P2.Ph Ph
FROM
(
    SELECT minuteTime.minuteTime minuteTime,
    ( SELECT MAX(time) FROM temperature WHERE time <= minuteTime.minuteTime AND time >= NOW() - INTERVAL 1 HOUR) tempTime, 
    ( SELECT MAX(time) FROM ph WHERE time <= minuteTime.minuteTime AND time >= NOW() - INTERVAL 1 HOUR) phTime,  
    ( SELECT MAX(time) FROM solids WHERE time <= minuteTime.minuteTime AND time >= NOW() - INTERVAL 1 HOUR) solidsTime
    FROM  
    (
        SELECT time + INTERVAL 59 - SECOND( time ) SECOND minuteTime
        FROM Ph
        WHERE time >= NOW() - INTERVAL 1 HOUR AND time <= NOW()
        UNION SELECT time + INTERVAL 59 - SECOND( time ) SECOND
        FROM solids
        WHERE time >= NOW() - INTERVAL 1 HOUR AND time <= NOW()
        UNION SELECT time + INTERVAL 59 - SECOND( time ) SECOND
        FROM temperature
        WHERE time >= NOW() - INTERVAL 1 HOUR AND time <= NOW()
        GROUP BY 1
    ) minuteTime
) timeTable
LEFT JOIN temperature T2 ON T2.time = timeTable.tempTime
LEFT JOIN solids S2 ON S2.time = timeTable.solidsTime
LEFT JOIN ph P2 ON P2.time = timeTable.phTime
ORDER BY minuteTime ASC

Настроих трите таблици с около 800 000 реда тестови данни, всяка. На MySQL 5.5.30 заявката по-горе се изпълнява за около 3,5 секунди и връща 61 реда резултат. Но абсолютно трябва да имате индекси за всяка от колоните за време:

ALTER TABLE `ph` ADD INDEX ( `time` ) ;
ALTER TABLE `solids` ADD INDEX ( `time` ) ;
ALTER TABLE `temperature` ADD INDEX ( `time` ) ;

В противен случай заявката няма да бъде прекратена. Вярвам, че нито една заявка, обработваща това количество данни, няма да има.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Хибернация:Открита застой при опит за получаване на заключване

  2. Намерете безплатна стая (система за резервации)

  3. Експортирайте прости данни от Excel в MySQL с помощта на PHP

  4. virtualenv(python3.4), грешка при инсталиране на pip mysqlclient

  5. Защо SQLSTATE[HY000]:Обща грешка?