sql >> Databasteknik >  >> RDS >> Mysql

Flera MYSQL-frågor i tabell med flera kolumner

Ok, frågeoptimeraren verkar ha vissa problem med mitt tidigare svar med stora tabeller. Prova den här lösningen istället, den fungerar med beroende underfrågor:

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

Jag har ställt in de tre tabellerna med cirka 800 000 rader med testdata, vardera. På MySQL 5.5.30 körs frågan ovan på cirka 3,5 sekunder och returnerar 61 resultatrader. Men du måste absolut ha index på var och en av tidskolumnerna:

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

Annars avslutas inte frågan. Jag tror att ingen fråga som hanterar denna mängd data kommer att göra det.



  1. SQLite JSON_ARRAY_LENGTH()

  2. Cakephp 2.0 mysql-fråga

  3. vilken är den bästa programvaran för att rita ERD för en mysql-databas för Windows

  4. Varför SQLSTATE[HY000]:Allmänt fel?