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

truy vấn phức tạp mất quá nhiều thời gian chuyển

Bạn cần một chỉ số kết hợp trên bảng giao nhau:

ALTER TABLE instruments_tools ADD KEY (id_instrument, id_tool);

Thứ tự của các cột trong chỉ mục đó rất quan trọng!

Những gì bạn đang hy vọng là các phép nối sẽ bắt đầu với bảng công cụ, sau đó tra cứu mục nhập chỉ mục phù hợp trong chỉ mục kết hợp dựa trên id_instrument. Sau đó, khi nó tìm thấy mục nhập chỉ mục đó, nó sẽ có id_tool liên quan miễn phí. Vì vậy, nó không phải đọc bảng công cụ_công cụ mà chỉ cần đọc mục nhập chỉ mục. Điều đó sẽ đưa ra nhận xét "Sử dụng chỉ mục" trong EXPLAIN của bạn cho bảng tools_tools.

Điều đó sẽ hữu ích, nhưng bạn không thể tránh bảng tạm thời và sắp xếp tệp, vì các cột bạn đang nhóm và sắp xếp theo không thể sử dụng chỉ mục.

Bạn có thể cố gắng làm cho MySQL tránh ghi bảng tạm thời vào đĩa bằng cách tăng kích thước bộ nhớ mà nó có thể sử dụng cho các bảng tạm thời:

mysql> SET GLOBAL tmp_table_size = 256*1024*1024;      -- 256MB
mysql> SET GLOBAL max_heap_table_size = 256*1024*1024; -- 256MB

Con số đó chỉ là một ví dụ. Tôi không biết nó sẽ phải lớn đến mức nào đối với bảng tạm trong trường hợp của bạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lặp lại một Truy vấn chèn trong PHP

  2. Lỗi:MySQL tắt đột ngột. Trong khi cố gắng khởi động Mysql trên Xampp

  3. Tự động bổ sung một trường cho đến khi một điều kiện nhất định được đáp ứng mysql

  4. Thu hút người theo dõi bài đăng một cách hiệu quả trong laravel 5.1

  5. làm thế nào để chọn max của cột hỗn hợp / chuỗi int?