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

Trong MySQL, việc đặt SELECT foo có tăng hiệu suất nếu foo được lập chỉ mục không?

Điều đầu tiên cần biết là MySQL chỉ sử dụng một chỉ mục cho mỗi psuedo-SELECT (không phải câu lệnh) - khi bạn xem đầu ra của SELECT bằng cách sử dụng EXPLAIN, bạn sẽ thấy chỉ mục nào đã được chọn. EXPLAIN chỉ có thể chạy trên SELECTS, vì vậy chúng tôi phải giả định rằng DELETE / UPDATE đang sử dụng cùng một gói khi bạn hoán đổi cú pháp cho SELECT ...

Hầu hết các cơ sở dữ liệu (những cơ sở dữ liệu được nhúng có thể là kỳ lạ) theo hiểu biết của tôi hỗ trợ việc sử dụng các chỉ mục trong các mệnh đề sau:

  • CHỌN
  • THAM GIA (cú pháp ANSI-92)
  • WHERE (vì có cả ANSI-89 lọc ở đây)
  • HAVING (tương đương WHERE, nhưng không giống với WHERE - cho phép sử dụng tổng hợp mà không cần truy vấn con)
  • ĐẶT HÀNG THEO

Tôi không 100% trên GROUP BY, vì vậy tôi đang bỏ qua nó.

Cuối cùng, đó là sự lựa chọn của trình tối ưu hóa cho những gì sẽ sử dụng dựa trên thuật toán của nó và số liệu thống kê mà nó có sẵn. Bạn có thể sử dụng cú pháp BẢNG PHÂN TÍCH để làm mới thống kê (vui lòng định kỳ, không liên tục).

Phụ lục

MySQL cũng giới hạn dung lượng để phân bổ chỉ mục - 1.000 byte cho bảng MyISAM và 767 byte cho bảng InnoDB . Vì MySQL chỉ sử dụng một chỉ mục cho mỗi psuedo-SELECT, nên việc bao gồm các chỉ mục (chỉ mục bao gồm nhiều hơn một cột) là một ý tưởng hay nhưng nó thực sự là để kiểm tra truy vấn phổ biến nhất và tối ưu hóa nó tốt nhất có thể. Ưu tiên lập chỉ mục phải là:

  1. Khóa chính (ở đâu đó trong phiên bản v5, việc tạo chỉ mục cho pk đã trở thành tự động)
  2. Khoá ngoại (ứng cử viên có khả năng cao nhất là THAM GIA tiếp theo
  3. Tiêu chí lọc (giả sử bạn có không gian)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối Visual c ++ 2008 với MySql

  2. Cách tạo câu lệnh chuyển đổi PHP động từ truy vấn MySQL

  3. Làm thế nào để kiểm tra (hoặc thậm chí thiết lập) đối chiếu trong tệp mdb (truy cập ms)?

  4. Thiết kế cơ sở dữ liệu chuẩn hóa để có được 5 người hàng xóm gần nhất bằng cách sử dụng chỉ mục không gian MySQL

  5. Cách tốt nhất để xử lý các phiên cho một trang PHP trên nhiều máy chủ là gì?