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

Có hợp lý không khi sử dụng một chỉ mục sẽ có bản số thấp?

Một chỉ mục có thể hữu ích ngay cả trên các trường số lượng thấp nếu:

  1. Khi một trong các giá trị có thể có rất ít so với các giá trị khác và bạn tìm kiếm nó.

    Ví dụ:có rất ít phụ nữ mù màu, vì vậy truy vấn này:

    SELECT  *
    FROM    color_blind_people
    WHERE   gender = 'F'
    

    có lẽ sẽ được hưởng lợi nhiều nhất từ ​​chỉ mục về gender .

  2. Khi các giá trị có xu hướng được nhóm lại theo thứ tự bảng:

    SELECT  *
    FROM    records_from_2008
    WHERE   year = 2010
    LIMIT 1
    

    Mặc dù chỉ có 3 các năm khác biệt ở đây, các bản ghi có các năm trước hầu hết được thêm vào đầu tiên nên rất nhiều bản ghi sẽ phải được quét trước khi trả về 2010 đầu tiên ghi lại nếu không có chỉ mục.

  3. Khi bạn cần ORDER BY / LIMIT :

    SELECT  *
    FROM    people
    ORDER BY
            gender, id
    LIMIT 1
    

    Không có chỉ mục, một filesort sẽ được yêu cầu. Mặc dù nó được tối ưu hóa phần nào cho LIMIT , nó vẫn cần quét toàn bộ bảng.

  4. Khi chỉ mục bao gồm tất cả các trường được sử dụng trong truy vấn:

    CREATE INDEX (low_cardinality_record, value)
    
    SELECT  SUM(value)
    FROM    mytable
    WHERE   low_cardinality_record = 3
    
  5. Khi bạn cần DISTINCT :

    SELECT  DISTINCT color
    FROM    tshirts
    

    MySQL sẽ sử dụng INDEX FOR GROUP-BY và nếu bạn có ít màu, truy vấn này sẽ nhanh chóng ngay cả với hàng triệu bản ghi.

    Đây là một ví dụ về trường hợp khi chỉ mục trên trường số lượng thấp là nhiều hơn hiệu quả hơn so với trường có bản số cao.

Lưu ý rằng nếu DML hiệu suất không ảnh hưởng nhiều đến vấn đề, thì việc tạo chỉ mục sẽ an toàn.

Nếu trình tối ưu hóa cho rằng chỉ mục không hiệu quả, chỉ mục sẽ không được sử dụ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. Đang tải lớp `com.mysql.jdbc.Driver '. Điều này không được dùng nữa. Lớp trình điều khiển mới là `com.mysql.cj.jdbc.Driver '

  2. Lô mùa xuân với bí danh cột làm khóa sắp xếp - câu lệnh where không đúng định dạng

  3. Cách in Datagridview có bảng trong VB

  4. cách đặt giá trị mặc định cho kiểu văn bản trong mysql

  5. Nhanh chóng thêm bản sao của một cột vào bảng MySQL