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

Chỉ mục MySQL 5.0 - Duy nhất so với Không duy nhất

TỪ KHÓA DUY NHẤT và CHÍNH LÀ ràng buộc , không phải chỉ mục. Mặc dù hầu hết các cơ sở dữ liệu thực hiện các ràng buộc này bằng cách sử dụng một chỉ mục. Chi phí bổ sung của ràng buộc ngoài chỉ mục là không đáng kể, đặc biệt khi bạn tính chi phí theo dõi và sửa chữa các bản sao không cố ý khi (không phải nếu) chúng xảy ra.

Các chỉ mục thường hiệu quả hơn nếu ở đó bạn có tính chọn lọc cao . Đây là tỷ lệ giữa số giá trị khác biệt với tổng số hàng.

Ví dụ:trong cột cho Số An sinh Xã hội, bạn có thể có 1 triệu hàng với 1 triệu giá trị khác nhau. Vì vậy, độ chọn lọc là 1000000/1000000 =1,0 (mặc dù hiếm có ngoại lệ lịch sử, SSN được dự định là duy nhất).

Nhưng một cột khác trong bảng đó, "giới tính" chỉ có thể có hai giá trị khác nhau trên 1 triệu hàng. 2/1000000 =độ chọn lọc rất thấp.

Chỉ mục có ràng buộc KHÓA DUY NHẤT hoặc CHÍNH XÁC được đảm bảo có độ chọn lọc là 1,0, vì vậy nó sẽ luôn có hiệu quả như một chỉ mục có thể.

Bạn đã hỏi về sự khác biệt giữa khóa chính và một ràng buộc duy nhất. Về cơ bản, đó là bạn chỉ có thể có một ràng buộc khóa chính cho mỗi bảng (ngay cả khi định nghĩa của ràng buộc đó bao gồm nhiều cột), trong khi bạn có thể có nhiều ràng buộc duy nhất. Một cột có ràng buộc duy nhất có thể cho phép NULL, trong khi các cột trong ràng buộc khóa chính không được phép NULL. Mặt khác, khóa chính và khóa duy nhất rất giống nhau trong cách triển khai và sử dụng chúng.

Bạn đã hỏi trong một nhận xét về việc sử dụng MyISAM hay InnoDB. Trong MySQL, họ sử dụng thuật ngữ công cụ lưu trữ . Có rất nhiều điểm khác biệt nhỏ giữa hai công cụ lưu trữ này, nhưng những điểm khác biệt chính là:

  • InnoDB hỗ trợ các giao dịch, vì vậy bạn có thể chọn khôi phục hoặc cam kết các thay đổi. MyISAM luôn tự động gửi một cách hiệu quả.
  • InnoDB thực thi các ràng buộc khóa ngoại. MyISAM không thực thi hoặc thậm chí lưu trữ các ràng buộc khóa ngoại.

Nếu những tính năng này là những thứ bạn cần trong ứng dụng của mình, thì bạn nên sử dụng InnoDB.

Để phản hồi bình luận của bạn, không hề đơn giản. InnoDB thực sự nhanh hơn MyISAM trong một số trường hợp, vì vậy nó phụ thuộc vào kết hợp ứng dụng của bạn bao gồm các lựa chọn, cập nhật, truy vấn đồng thời, chỉ mục, cấu hình bộ đệm, v.v.

Xem http:/ /www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ để so sánh hiệu suất rất kỹ lưỡng của các công cụ lưu trữ. InnoDB thắng MyISAM thường xuyên đến mức không thể nói cái này nhanh hơn cái kia.

Như với hầu hết các câu hỏi liên quan đến hiệu suất, cách duy nhất để trả lời nó cho ứng dụng của bạn là kiểm tra cả hai cấu hình bằng cách sử dụng ứng dụng của bạn và một mẫu dữ liệu đại diện, đồng thời đo lường kết quả.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CONVERT_TZ () Ví dụ - MySQL

  2. Làm cách nào để đặt AUTO_INCREMENT trong Laravel với Eloquent?

  3. Chỉ cập nhật MySQL cột nếu giá trị không trống ở đâu

  4. Kết nối / sử dụng MySQL tại localhost thay vì miền có nhanh hơn không (ngay cả khi miền phân giải trên cùng một máy tính)?

  5. MySQL tạo cú pháp thủ tục được lưu trữ với dấu phân cách