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

Làm cách nào để yêu cầu Trình tối ưu hóa MySQL sử dụng chỉ mục trên bảng dẫn xuất?

Có một giải pháp cho vấn đề này trong MySQL Server 5.6 - bản phát hành xem trước (tại thời điểm viết bài này).

http://dev.mysql.com /doc/refman/5.6/en/from-clause-subquery-optimization.html

Mặc dù, tôi không chắc liệu MySQL Optimizer có sử dụng lại các chỉ mục đã tồn tại hay không khi nó "thêm chỉ mục vào bảng dẫn xuất"

Hãy xem xét truy vấn sau:

CHỌN * TỪ t1JOIN (CHỌN * TỪ t2) Như có nguồn gốc_t2 BẬT t1.f1 =dẫn xuất_t2.f1;

Tài liệu cho biết:"Trình tối ưu hóa tạo chỉ mục trên cột f1 từ origin_t2 nếu làm như vậy sẽ cho phép sử dụng quyền truy cập ref cho kế hoạch thực thi chi phí thấp nhất."

OK, điều đó thật tuyệt, nhưng liệu trình tối ưu hóa có sử dụng lại các chỉ mục từ t2 không? Nói cách khác, điều gì sẽ xảy ra nếu một chỉ mục tồn tại cho t2.f1? Chỉ mục này có được sử dụng lại hay trình tối ưu hóa tạo lại chỉ mục này cho bảng dẫn xuất? Ai biết?

CHỈNH SỬA: Giải pháp tốt nhất cho đến MySQL 5.6 là tạo một bảng tạm thời, tạo một chỉ mục trên bảng đó, sau đó chạy truy vấn SELECT trên bảng tạm thời.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhập GeoLite2 của MaxMind vào MySQL

  2. Lỗi MySQL # 1071 - Khóa được chỉ định quá dài; độ dài khóa tối đa là 767 byte

  3. Mã hóa lưu lượng truy cập MySQL trong tập lệnh

  4. Bất cứ điều gì tương tự như Hibernate trong PHP?

  5. Cấp phép MySQL và GPL