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

chỉ số chính Vs chỉ số phụ:sự khác biệt về hiệu suất

Bảng được phân nhóm là B-Tree không có phần "heap" - các hàng được lưu trữ trực tiếp trong cấu trúc B-Tree của chỉ mục phân nhóm (khóa chính). Các nút của Cây B có thể được tách hoặc liên kết lại, do đó, vị trí thực hoặc các hàng có thể thay đổi, vì vậy chúng tôi không thể có một "con trỏ" đơn giản từ chỉ mục phụ đến các hàng, vì vậy chỉ mục phụ phải bao gồm một bản sao hoàn chỉnh của các trường chỉ mục chính để có thể xác định các hàng một cách đáng tin cậy.

Điều này đúng với Oracle, MS SQL Server và cũng đúng với InnoDB .

Điều đó có nghĩa là các chỉ mục phụ trong các bảng được nhóm lại "béo" hơn các chỉ mục phụ trong các bảng dựa trên đống, điều này:

  • giảm bớt phân nhóm dữ liệu,
  • làm giảm hiệu quả của bộ nhớ cache,
  • làm cho chúng đắt hơn để duy trì,
  • và quan trọng nhất, có hậu quả đối với hiệu suất truy vấn:
    • Truy vấn thông qua chỉ mục phụ có thể yêu cầu tra cứu hai lần - một tra cứu thông qua chỉ mục phụ để định vị dữ liệu "khóa" và một tra cứu thông qua chỉ mục chính, để định vị chính hàng (Oracle có một số tối ưu hóa thú vị để tránh tra cứu thứ hai, nhưng Theo hiểu biết của tôi thì InnoDB không làm như vậy).
    • Mặt khác, chỉ mục phụ đương nhiên bao phủ nhiều trường hơn, vì vậy có thể tránh hoàn toàn lần tra cứu thứ hai trong đó chỉ mục dựa trên heap truyền thống sẽ yêu cầu quyền truy cập bảng. Tuy nhiên, bạn có thể đạt được hiệu quả tương tự trong chỉ mục dựa trên heap bằng cách chỉ cần thêm nhiều trường vào đó.

Hãy để tôi trích dẫn Sử dụng Chỉ mục, Luke! : "Ưu điểm của bảng được tổ chức theo chỉ mục và chỉ mục theo nhóm hầu hết được giới hạn ở các bảng không cần chỉ mục thứ hai."

Thật đáng tiếc, vì MySQL không cho phép bạn chọn phân cụm độc lập với công cụ lưu trữ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql không thể kết nối - Quyền truy cập bị từ chối (sử dụng mật khẩu có)

  2. Thời gian xuất dữ liệu MySQL thay đổi

  3. PHP SQL:Cách lưu dữ liệu vào nhiều cơ sở dữ liệu từ một dạng html HOẶC cách sao chép dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác một cách tự động

  4. MySQL regexp chậm hơn nhiều

  5. Tự động tạo cột từ dữ liệu hàng bằng Chọn trong Bigquery