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

Tại sao truy vấn nhiều cột của tôi chậm hơn đáng kể so với các truy vấn cột đơn tương ứng, ngay cả với chỉ mục nhiều cột?

Bạn đã tạo chỉ mục stop_id, departure_time chưa ? Bởi vì departure_time, stop_id sẽ hoàn toàn không làm gì cả.

Đây là một thực sự khó - nó có mọi điều xấu có thể xảy ra khi xử lý các chỉ mục :(

Bạn có một phạm vi, một HOẶC và một IN không liền kề - điều đó không tệ hơn thế.

Hãy thử stop_id, departure_time và nếu nó không hữu ích thì bạn không thể làm gì nhiều khi chuyển sang PostgreSQL.

Bạn cũng có thể thử viết lại truy vấn dưới dạng:

SELECT * 
from stop_times 
WHERE ( stop_times.stop_id IN(51511,51509,51508,51510,6,53851,51522,51533)
      AND departure_time BETWEEN '02:41' AND '05:41'
      )
   OR ( stop_times.stop_id IN(51511,51509,51508,51510,6,53851,51522,51533)
      AND departure_time BETWEEN '26:41' AND '29:41' 
      ) 

hoặc:

    SELECT * 
    from stop_times 
    WHERE ( stop_times.stop_id IN(51511,51509,51508,51510,6,53851,51522,51533)
          AND departure_time BETWEEN '02:41' AND '05:41'
          )
UNION ALL
    SELECT * 
    from stop_times 
    WHERE ( stop_times.stop_id IN(51511,51509,51508,51510,6,53851,51522,51533)
          AND departure_time BETWEEN '26:41' AND '29:41' 
          )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP 7 không thể tìm thấy MySQLi

  2. mô hình kề, đã cho một id trả về các nút lá

  3. Chọn tất cả các mục trong một bảng và kết hợp với một bảng khác, cho phép rỗng

  4. Chèn hàng chỉ khi có id từ bảng khác

  5. Nhân bản GROUP_CONCAT cho gấu trúc.DataFrame