Bạn có cần phải tạo một chỉ mục một cách rõ ràng, hoặc nó ẩn khi xác định khóa chính? Câu trả lời có giống với MyISAM và InnoDB không?
Bạn có cần phải tạo một chỉ mục một cách rõ ràng, hoặc nó ẩn khi xác định khóa chính? Câu trả lời có giống với MyISAM và InnoDB không?
Câu trả lời:
Khóa chính luôn được lập chỉ mục. Điều này giống với MyISAM và InnoDB, và nói chung đúng với tất cả các công cụ lưu trữ mà ở tất cả các chỉ số hỗ trợ.
Theo http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html có vẻ như điều này sẽ được ẩn
Mặc dù điều này đã được hỏi trong năm 2009, tôi vẫn muốn đăng một tài liệu tham khảo thực tế đến tài liệu MySQL trên các khóa chính. http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html
Khóa chính cho bảng biểu thị cột hoặc tập hợp các cột mà bạn sử dụng trong các truy vấn quan trọng nhất của mình. Nó có một chỉ mục liên quan, cho hiệu suất truy vấn nhanh
Để tham khảo MySQL 5.0, hãy xem: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
Hầu hết các chỉ mục MySQL ( PRIMARY KEY , UNIQUE, INDEX và FULLTEXT) được lưu trữ trong cây B. Các ngoại lệ là các chỉ mục trên các loại dữ liệu không gian sử dụng cây R và các bảng MEMOR cũng hỗ trợ các chỉ mục băm.
Khóa chính được lập chỉ mục ngầm cho cả MyISAM và InnoDB. Bạn có thể xác minh điều này bằng cách sử dụng EXPLAIN trên truy vấn sử dụng khóa chính.
Tôi đoán đây là câu trả lời
mysql> create table test(id int primary key, s varchar(20));
Query OK, 0 rows affected (0.06 sec)
mysql> show indexes from test \G
*************************** 1. row ***************************
Table: test
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.00 sec)
Các chỉ mục được sử dụng tốt nhất trên các cột thường được sử dụng trong các mệnh đề và trong bất kỳ loại sắp xếp nào, chẳng hạn như "sắp xếp theo". Bạn có thể đang làm việc trên một cơ sở dữ liệu phức tạp hơn, vì vậy thật tốt khi nhớ một vài quy tắc đơn giản.
Chỉ mục tăng tốc nơi mệnh đề và thứ tự theo. Hãy nhớ nghĩ về cách dữ liệu của bạn sẽ được sử dụng khi xây dựng các bảng của bạn. Có một vài điều khác cần nhớ. Nếu bảng của bạn rất nhỏ, tức là chỉ có một vài nhân viên, việc sử dụng một chỉ mục sẽ tệ hơn là để nó ra ngoài và chỉ để nó thực hiện quét bảng.
Các chỉ mục thực sự chỉ có ích với các bảng có nhiều hàng.
Một điều cần nhớ, đó là một khuyết điểm trong tình huống cơ sở dữ liệu của nhân viên chúng tôi, đó là nếu cột có độ dài thay đổi, các chỉ mục (cũng như hầu hết MySQL) hoạt động kém hiệu quả hơn nhiều.
Đừng quên tham gia quá! Các trường tham gia được lập chỉ mục tăng tốc mọi thứ.
Khóa chính luôn được lập chỉ mục tự động và duy nhất. Vì vậy, hãy cẩn thận để không tạo ra các chỉ mục dư thừa.
Chẳng hạn, nếu bạn đã tạo một bảng như vậy
CREATE TABLE mytable (foo INT NOT NULL PRIMARY KEY, bar INT NOT NULL, baz INT NOT NULL,
UNIQUE(foo), INDEX(foo)) ENGINE=InnoDB;
bởi vì bạn muốn lập chỉ mục khóa chính và thực thi một ràng buộc duy nhất trên nó, cuối cùng bạn thực sự sẽ tạo ra ba chỉ mục foo
!
Người ta có thể nghĩ về một cột khóa chính như bất kỳ cột được lập chỉ mục nào khác với các ràng buộc của khóa chính mang theo nó.
Trong hầu hết các trường hợp sử dụng, chúng tôi cần cả khóa chính và cột / cột được lập chỉ mục trong một bảng, bởi vì các truy vấn của chúng tôi có thể lọc các hàng dựa trên cột / cột không phải là khóa chính, trong trường hợp đó chúng tôi thường lập chỉ mục các cột / cột đó cũng.