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

Tại sao MySQL không sử dụng một chỉ mục để so sánh lớn hơn?

Có lẽ bạn nên để MySql quyết định về kế hoạch truy vấn. Có một khả năng là thực hiện quét chỉ mục sẽ kém hiệu quả hơn quét toàn bộ bảng.

Có hai cấu trúc dữ liệu trên đĩa cho bảng này

  1. Bản thân bảng; và
  2. Chỉ mục B-Tree khóa chính.

Khi bạn chạy một truy vấn, trình tối ưu hóa có hai tùy chọn về cách truy cập dữ liệu:

SELECT * FROM userapplication WHERE application_id > 1025;

Sử dụng Chỉ mục

  1. Quét chỉ mục B-Tree để tìm địa chỉ của tất cả các hàng có application_id > 1025
  2. Đọc các trang thích hợp của bảng để lấy dữ liệu cho các hàng này.

Không sử dụng Chỉ mục

Quét toàn bộ bảng và chọn các bản ghi thích hợp.

Chọn lựa chọn tốt nhất

Công việc của trình tối ưu hóa truy vấn là chọn chiến lược hiệu quả nhất để có được dữ liệu bạn muốn. Nếu có nhiều hàng có application_id > 1025 thì nó thực sự có thể kém hiệu quả hơn khi sử dụng chỉ mục. Ví dụ:nếu 90% bản ghi có application_id > 1025 thì trình tối ưu hóa truy vấn sẽ phải quét khoảng 90% các nút lá của chỉ mục b-tree và sau đó đọc ít nhất 90% của bảng để lấy dữ liệu thực tế; điều này sẽ liên quan đến việc đọc nhiều dữ liệu từ đĩa hơn là chỉ quét bảng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thả nhiều bảng trong một lần trong MySQL

  2. làm thế nào để tự động chèn tham chiếu khóa ngoại trong bảng trong mysql hoặc JDBC?

  3. Chèn nhiều hàng với cùng một ID duy nhất

  4. mysqli_stmt_get_result thay thế cho php 5.2.6

  5. Hàm MAX trong mệnh đề mysql ở đâu