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

Chỉ mục phức hợp có hướng trong MySQL không?

Khi bạn muốn tốc độ truy xuất tối đa và có cả hai cột trong kết hợp hoặc trong điều kiện, NHƯNG đôi khi cột a có độ chọn lọc cao hơn và đôi khi cột b có độ chọn lọc cao hơn và bạn muốn tận dụng thực tế đó từ chỉ mục duy nhất.

Ngoài ra, tôi nghĩ rằng tỷ lệ kích thước dữ liệu / hiệu suất của máy của bạn phải khá cao và đồng thời bạn sẽ phải (phỏng đoán) sẵn sàng gọi bất kỳ cải tiến nào là cần thiết (ngay cả khi chỉ bằng một vài phần trăm).

Tuy nhiên, kinh nghiệm dạy rằng mọi thứ phụ thuộc vào rất nhiều yếu tố; với RDBMS và môi trường ứng dụng cụ thể, bạn chạy tốt hơn các điểm chuẩn của riêng mình.

CHỈNH SỬA:Giải thích thêm về composite indexes.from wikipedia :
"Thứ tự các cột được liệt kê trong định nghĩa chỉ mục là quan trọng. Có thể truy xuất một tập hợp các số nhận dạng hàng chỉ bằng cách sử dụng cột được lập chỉ mục đầu tiên. Tuy nhiên, điều này là không thể hoặc không hiệu quả (trên hầu hết các cơ sở dữ liệu) để truy xuất tập hợp số nhận dạng hàng chỉ sử dụng cột được lập chỉ mục thứ hai trở lên.
Ví dụ:hãy tưởng tượng danh bạ điện thoại được sắp xếp theo thành phố trước tiên, sau đó theo họ và sau đó theo tên. Nếu bạn được cung cấp cho thành phố, bạn có thể dễ dàng trích xuất danh sách tất cả các số điện thoại của thành phố đó. Tuy nhiên, trong danh bạ điện thoại này sẽ rất tẻ nhạt để tìm tất cả các số điện thoại cho một họ nhất định. Bạn sẽ phải tìm trong từng thành phố phần dành cho các mục nhập có họ đó. "

Các giải thích của Wikipedia có thể được đơn giản hóa quá mức, nhưng nó cung cấp cho bạn ý tưởng cơ bản (vì các phép loại suy, hãy nhớ rằng danh bạ điện thoại thường có các chỉ mục theo cụm và đó sẽ không phải là chỉ mục cơ sở dữ liệu chung của bạn).

Tùy thuộc vào kích thước của chỉ mục so với kích thước của cấu trúc dữ liệu so với bộ nhớ khả dụng và tính chọn lọc trên cột đầu tiên của chỉ mục, việc sử dụng chỉ mục được sắp xếp sai sau đó sử dụng tính năng quét bảng vẫn có thể ít tốn kém hơn nhiều.

À, vừa nghĩ ra một phép tương tự tốt hơn với ví dụ bạn đang tìm Hãy tưởng tượng một cuốn sách giáo khoa đẹp, nó sẽ có mục lục với các chương và chương con và số trang mà chúng ở đó (là một chỉ mục không phân cụm chứa các con trỏ đến bản ghi dữ liệu - trang). Bây giờ hãy tưởng tượng rằng sách giáo khoa theo tiêu chuẩn SQL-92, khi đó hầu hết các thuật ngữ trong TOC sẽ là thuật ngữ SQL (hãy giữ giả định này) .Bạn cũng sẽ có một chỉ mục khác ở cuối cuốn sách. liệt kê tất cả các thuật ngữ thú vị theo thứ tự bảng chữ cái (giả sử với tên chương chính) và số trang.

Đối với câu hỏi như 'Hãy cho tôi biết tất cả các chương mà DISTINCT xuất hiện', bạn sẽ sử dụng chỉ mục thứ hai. (Vì tính chọn lọc của trường sau này cao)

Đối với câu hỏi chẳng hạn như 'Hãy cho tôi biết số lượng các thuật ngữ xuất hiện trong chương đầu tiên', bạn sẽ sử dụng TOC

Vì vậy, đối với các câu hỏi như 'LỰA CHỌN được mô tả trong chương DML?' bạn có thể sử dụng một trong hai chỉ mục. (vì tính chọn lọc của cả hai trường đều cao) Tuy nhiên, nếu TOC của chính DML dài 3 trang và mục nhập CHỌN trong chỉ mục chỉ có mười lăm dòng, bạn có thể sẽ chuyển đến mục thứ hai và đó là một ví dụ về thời điểm bạn được hưởng lợi từ cả hai chỉ mục.

Bây giờ, nếu bạn nghĩ rằng nó đã tìm nạp quá xa, hãy xem xét một cơ sở dữ liệu của thư viện đã quét của hội nghị. :)

Như tôi đã nói trước đây, tất cả việc lập kế hoạch đều ổn, nhưng cuối cùng hãy chạy các điểm chuẩn của riêng bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CakePHP:Cách triển khai các thay đổi lược đồ DB cho quá trình sản xuất mà không có lỗi

  2. Tập lệnh đăng nhập không thực thi - Bluehost

  3. Cách nhận bản ghi giữa 2 ngày trong MySQL

  4. Ví dụ về giao dịch PHP + MySQL

  5. sử dụng mysqli để ngăn chặn việc tiêm sql, làm thế nào để đặt NULL hoặc CURRENT_DATE?