sql >> Database >  >> RDS >> Mysql

Meerdere MYSQL-query's in een tabel met meerdere kolommen

Ok, de query-optimizer lijkt wat problemen te hebben met mijn vorige antwoord met grote tabellen. Probeer in plaats daarvan deze oplossing, het werkt met afhankelijke subquery's:

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

Ik heb de drie tabellen opgesteld met elk ongeveer 800.000 rijen testgegevens. Op MySQL 5.5.30 wordt de bovenstaande query uitgevoerd in ongeveer 3,5 seconden en worden 61 resultaatrijen geretourneerd. Maar je moet absoluut indexen hebben op elk van de tijdkolommen:

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

Anders wordt de query niet beëindigd. Ik denk dat geen enkele zoekopdracht die deze hoeveelheid gegevens verwerkt dat zal doen.



  1. PHP MySQL selecteer willekeurige rijen

  2. PDO bespotten met phpunit

  3. MariaDB JSON_QUERY() uitgelegd

  4. Hoe de huidige tijd in MySQL in te voegen met Java