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

Lập chỉ mục một cột có các giá trị trùng lặp

Dựa trên thông số kỹ thuật không đầy đủ, tôi sẽ làm điều này:

   CREATE UNIQUE INDEX stock_UX1 ON stock (storeid,seedid,stk)

Chỉ mục này sẽ đáp ứng yêu cầu đối với chỉ mục có storeid làm cột hàng đầu. (Và chúng tôi biết sẽ có yêu cầu đó nếu đây là InnoDB và storeid là một khóa ngoại.)

Với một hàng bảng ngắn như vậy, tôi sẽ tiếp tục và biến nó thành một chỉ mục bao trùm và bao gồm tất cả các cột. Sau đó, các truy vấn có thể được đáp ứng trực tiếp từ các trang chỉ mục mà không cần tra cứu đến các trang dữ liệu trong bảng bên dưới.

Vì chúng tôi biết rằng (seedid,storeid) là duy nhất (được cho là KHÓA CHÍNH), chúng tôi biết (storeid,seedid) cũng là duy nhất, vì vậy chúng tôi cũng có thể khai báo chỉ mục là DUY NHẤT.

Có những sự lựa chọn khác; chúng ta không phải tạo chỉ mục đó ở trên. Thay vào đó, chúng tôi chỉ có thể làm điều này:

   CREATE INDEX stock_IX2 ON stock (storeid)

Nhưng điều đó sẽ sử dụng gần như cùng một lượng không gian và không có lợi cho nhiều truy vấn nhất có thể.

Chỉ mục phụ sẽ chứa khóa chính của bảng; để chỉ mục thứ hai sẽ bao gồm seedid , được cung cấp TỪ KHÓA CHÍNH của bảng. Tức là, chỉ số tương đương với cái này:

   CREATE INDEX stock_IX3 ON stock (storeid,seedid)

Và chúng tôi biết sự kết hợp của hai cột đó là duy nhất, vì vậy chúng tôi có thể bao gồm từ khóa DUY NHẤT

   CREATE UNIQUE INDEX stock_UX4 ON stock (storeid,seedid)

Nếu chúng tôi GIẢI THÍCH về một truy vấn của biểu mẫu

  EXPLAIN
  SELECT t.storeid
       , t.seedid
       , t.stk 
    FROM stock t 
   WHERE t.storeid = 'foo'

chúng ta có thể thấy thao tác quét phạm vi trên chỉ mục phụ; nhưng truy xuất giá trị của stk cột sẽ yêu cầu tra cứu các trang dữ liệu trong bảng bên dưới. Bao gồm stk trong chỉ mục phụ sẽ làm cho chỉ mục trở thành bao trùm chỉ mục cho truy vấn. Với chỉ mục được đề xuất đầu tiên trong câu trả lời, chúng tôi mong đợi EXPLAIN đầu ra để hiển thị "Sử dụng chỉ mục".



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Loại bỏ hoặc cắt bớt một số ký tự đầu tiên hoặc cuối cùng trong cơ sở dữ liệu MySQL với SQL

  2. MySQL:Nhóm theo &Đếm nhiều trường

  3. Entity-Framework -> MySql đưa ra 'Đánh giá chức năng đã hết thời gian.'

  4. Làm thế nào để thêm một hình ảnh vào cơ sở dữ liệu php mysql?

  5. Quyền để tạo trình kích hoạt trong mysql