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

MySQL không sử dụng chỉ mục khi kiểm tra =1, nhưng sử dụng nó với =0

Tại sao MySQL không sử dụng chỉ mục?
MySQL sẽ không sử dụng chỉ mục nếu tỷ lệ phần trăm lớn của các hàng có giá trị đó.

Tại sao việc thêm use index truy vấn không hoạt động ở đây
Thêm use index mệnh đề sẽ không có hiệu lực, vì use index sẽ chỉ đề xuất cái nào chỉ mục để sử dụng, nó sẽ không gợi ý có nên sử dụng một chỉ mục hay không.

Lưu ý khi sử dụng bảng kiểm tra có ít hàng Điều này đặc biệt gây khó chịu khi sử dụng bảng kiểm tra có ít hàng vì MySQL sẽ từ chối sử dụng chỉ mục và rất khó để biết truy vấn của bạn có vấn đề gì.
Vì vậy, hãy đảm bảo bạn thêm đủ hàng vào bảng kiểm tra để biến nó thành một bài kiểm tra thực tế.

Việc sử dụng chỉ mục trên các cột có số lượng thấp có vô ích không? Việc lập chỉ mục
trên các cột boolean không hữu ích như bạn đã nghĩ trước khi đặt câu hỏi này.
Tuy nhiên, nó cũng không vô ích .
Với InnoDB MySQL sẽ thử và truy xuất dữ liệu bằng cách sử dụng các chỉ mục nếu có thể, nếu trường boolean của bạn có chỉ mục thì truy vấn:

SELECT id, bool_field FROM table_with_many_columns_and_rows WHERE bool_field = 1

Có thể đọc tất cả dữ liệu trong chỉ mục bao gồm cho bool_field bởi vì các chỉ mục phụ trong InnoDB luôn bao gồm chỉ mục chính (id) cũng như vậy.
Điều này nhanh hơn vì MySQL không phải đọc toàn bộ bảng vào bộ nhớ.

Trong MyISAM, điều này không hoạt động và MySQL sẽ kiểm tra toàn bộ bảng.

Nhưng tôi có thể sử dụng force index
Bạn có thể, nhưng đối với các chỉ mục bản số thấp, nó sẽ làm cho truy vấn của bạn chậm hơn, không nhanh hơn. Chỉ ghi đè các chỉ mục trên các truy vấn phức tạp và chỉ nếu bạn biết các quy tắc MySQL sử dụng để chọn chỉ mục.

Liên kết:
Xem: http://dev.mysql .com / doc / refman / 5.1 / en / mysql-indexes.html
và: http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/

Nếu bạn muốn một cuốn sách về chủ đề này:hãy đọc
MySQL hiệu suất cao: http://oreilly.com / catalog / 9780596003067



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng MySQL và Neo4j cùng nhau có phải là một ý tưởng hay không?

  2. Hàm trả về Javascript

  3. SQL QUERY tìm kiếm nhiều trong một hàng để tìm dữ liệu từ một hàng khác trong cùng một bảng

  4. mysql_connect ():Không thể thực hiện kết nối vì máy mục tiêu đã chủ động từ chối nó

  5. Làm cách nào để đặt lại các từ dừng trong MYSQL?