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

chỉ mục một trường bit trong MYSQL

Nói chung là không. Trường hai trạng thái không tăng tốc các truy vấn khi được lập chỉ mục vì bạn phải xem trung bình một nửa số hàng. Bạn muốn các mục nhập chỉ mục của mình có tính chọn lọc - một mục nhập nhất định trong chỉ mục chỉ nên đại diện cho một tỷ lệ phần trăm nhỏ của các giá trị có thể (giả sử dưới 10%, tốt hơn là thành phần nhỏ của tỷ lệ phần trăm). Sau đó, việc sử dụng chỉ mục sẽ bỏ qua hầu hết dữ liệu trong bảng, đó là những gì mang lại cho bạn lợi ích về hiệu suất.

Một số DBMS hỗ trợ chỉ mục bitmap. Họ có thể giúp đỡ, nhưng bạn vẫn gặp phải vấn đề về tính chọn lọc.

Câu hỏi cập nhật nói rằng số lượng giá trị có giá trị 1 sẽ nhỏ (ít hơn một phần trăm); liệu một chỉ mục có mang lại lợi ích cho bạn bây giờ không?

Câu trả lời là:

  • Đối với những truy vấn mà bạn chỉ định rằng giá trị là 1 thì có, chỉ mục trên cột có thể mang lại lợi ích, miễn là trình tối ưu hóa thực sự sử dụng chỉ mục. Bạn có thể cần phải điều chỉnh DBMS để làm cho nó nhận ra rằng chỉ mục bị lệch khi sử dụng nó với các truy vấn có giá trị là 1; điều này có xu hướng dành riêng cho DBMS, nhưng cập nhật số liệu thống kê dưới nhiều hình thức khác nhau là tên của trò chơi, có thể sử dụng gợi ý trong các truy vấn SQL. Tất nhiên, nếu trình tối ưu hóa không bao giờ sử dụng chỉ mục, thì nó vẫn không mang lại lợi ích gì - và trình tối ưu hóa có thể quyết định rằng các chỉ mục khác sẽ giúp nó nhiều hơn theo một cách nào đó.

  • Đối với những truy vấn có giá trị là 0, chỉ mục không nên được sử dụng. Tuy nhiên, rất có thể DBMS sẽ tiếp tục duy trì chỉ mục cho các giá trị 0 - mặc dù nó không bao giờ nên sử dụng chúng. Nó sẽ là một DBMS bất thường có thể được lệnh 'chỉ lập chỉ mục cột này cho các giá trị khác 0', mặc dù điều đó sẽ rất có lợi.

Vì vậy - nó phụ thuộc. Nó phụ thuộc vào các truy vấn và nó phụ thuộc vào trình tối ưu hóa.

Cũng lưu ý rằng một chỉ mục tổng hợp - trên một số cột được sử dụng thông thường khác và sau đó trường bit cũng có thể cung cấp một số lợi ích. Vì vậy, nếu bạn hầu như luôn chọn trong một phạm vi ngày, thì chỉ mục tổng hợp trên cột ngày và trường bit (có thể theo thứ tự đó) sẽ cung cấp cho bạn một chỉ mục tốt.



  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àm cách nào để kết xuất tệp MySQL mà không có Khóa ngoại qua dòng lệnh?

  2. Chuỗi kết nối SqlAlchemy

  3. Sao lưu cơ sở dữ liệu logic bằng MySQL Shell

  4. GROUP_CONCAT ORDER THEO

  5. Quên mật khẩu Script cơ sở dữ liệu PHP mysqli