2013-05-15 44 views
12

Có kích thước tối đa của chỉ mục UNIQUE trong MySQL không? Tôi có sáu thứ nguyên trong chỉ mục của mình, dẫn đến một chỉ mục lớn. Có giới hạn số lượng bản ghi là UNIQUE chỉ mục không?Kích thước tối đa chỉ số UNIQUE trong MySQL

Tôi gặp phải các lỗi không rõ nguyên nhân và tự hỏi liệu có giới hạn từ số UNIQUE hay không. Nó có thể đến từ một giới hạn duy nhất không? Dưới đây là những gì nó trông giống như (Tôi cũng không hiểu tại sao cardinality của ba cột cuối cùng không tăng).

+-------+------------+----------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | 
+-------+------------+----------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
| table |   0 | PRIMARY |   1 | column_1  | A   |   15 |  NULL | NULL |  | BTREE  |   |    | 
| table |   0 | PRIMARY |   2 | column_2  | A   |  91948 |  NULL | NULL |  | BTREE  |   |    | 
| table |   0 | PRIMARY |   3 | column_3  | A   |  924889 |  NULL | NULL |  | BTREE  |   |    | 
| table |   0 | PRIMARY |   4 | column_4  | A   | 15723114 |  NULL | NULL |  | BTREE  |   |    | 
| table |   0 | PRIMARY |   5 | column_5  | A   | 15723114 |  NULL | NULL |  | BTREE  |   |    | 
| table |   0 | PRIMARY |   6 | column_6  | A   | 15723114 |  NULL | NULL |  | BTREE  |   |    | 
+-------+------------+----------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
+1

Bạn có sáu ràng buộc duy nhất trên một bảng duy nhất ?! Đó có thể là dấu hiệu cho thấy có điều gì đó sai về thiết kế ;-) –

+0

Bảng của bạn hiện có bao nhiêu hàng? Có phải là MyISAM hay InnoDB? – Jocelyn

+0

Có, đã đồng ý. Tôi sẽ khắc phục điều đó bằng cách thực thi tính duy nhất ở nơi khác. Tuy nhiên, nó nêu lên một điểm mà tôi tò mò về kích thước tối đa của chỉ mục. –

Trả lời

13

Đối với các bảng InnoDB, giới hạn là 3072 byte trên tất cả các cột được lập chỉ mục, có lẽ dùng chỉ có 767 byte đầu tiên của mỗi cột.

Khóa chỉ mục cho chỉ mục một cột có thể lên đến 767 byte. Giới hạn chiều dài tương tự áp dụng cho bất kỳ tiền tố khóa chỉ mục nào. Xem Phần 13.1.13, “TẠO Cú pháp INDEX”.

Độ dài khóa tối đa nội bộ InnoDB là 3500 byte, nhưng bản thân MySQL hạn chế điều này thành 3072 byte. Giới hạn này áp dụng cho độ dài của khóa chỉ mục kết hợp trong chỉ mục nhiều cột.

http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html

Vì vậy, dựa chặt chẽ vào các tài liệu, tôi muốn nói rằng bạn có thể có lên đến 1000 cột trong chỉ số của bạn (số lượng tối đa của cột trên một bảng InnoDB), với điều kiện là kích thước trung bình của mỗi là 3 byte hoặc ít hơn.

Đối với bảng MyISAM, nó nhỏ hơn 16 cột hoặc 1000 byte.

Số lượng tối đa của cột cho mỗi chỉ số là 16.

Chiều dài then chốt tối đa là 1000 byte. Điều này cũng có thể được thay đổi bằng cách thay đổi nguồn và biên dịch lại. Đối với trường hợp khóa dài hơn 250 byte, kích thước khối khóa lớn hơn mặc định là 1024 byte là được sử dụng.

http://dev.mysql.com/doc/refman/5.0/en/myisam-storage-engine.html

+0

Nó thực sự nói "Ràng buộc UNIQUE chiều dài tùy ý" – Tom

+1

@Tom Thú vị ... Tôi muốn được giải thích đầy đủ hơn về điều đó có nghĩa là gì. Trong hầu hết các bối cảnh, tùy ý thường không có nghĩa là "không quan tâm đến các giới hạn" mà đúng hơn là "bất kỳ giá trị nào của ý thích trong giới hạn". – svidgen

Các vấn đề liên quan