Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Nhiều truy vấn MYSQL vào bảng nhiều cột

Ok, trình tối ưu hóa truy vấn dường như có một số vấn đề với câu trả lời trước đây của tôi với các bảng lớn. Hãy thử giải pháp này để thay thế, nó hoạt động với các truy vấn phụ phụ thuộc:

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

Tôi đã thiết lập ba bảng với khoảng 800.000 hàng dữ liệu thử nghiệm, mỗi bảng. Trên MySQL 5.5.30, truy vấn trên chạy trong khoảng 3,5 giây và trả về 61 hàng kết quả. Nhưng bạn nhất thiết phải có chỉ mục trên mỗi cột thời gian:

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

Nếu không, truy vấn sẽ không kết thúc. Tôi tin rằng sẽ không có truy vấn nào xử lý lượng dữ liệu này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - làm thế nào để CHỌN nhiều bảng và THAM GIA nhiều hàng từ cùng một cột?

  2. Tôi có thể thực hiện một giao dịch trên hai cơ sở dữ liệu MySQL không?

  3. PHP &MySQL:Hiển thị SUM của thứ gì đó, được phân loại theo danh mục riêng biệt

  4. mysql - Tạo hiệu suất hàng so với cột

  5. MySQL- GROUP và COUNT theo ngày