13.1.15 & NBSP; Tạo câu lệnh INDEX
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
[index_type]
ON tbl_name [key_part,...]
[index_option]
[algorithm_option | lock_option] ...
key_part: {col_name [[length]] | [expr]} [ASC | DESC]
index_option: {
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
| COMMENT 'string'
| {VISIBLE | INVISIBLE}
| ENGINE_ATTRIBUTE [=] 'string'
| SECONDARY_ENGINE_ATTRIBUTE [=] 'string'
}
index_type:
USING {BTREE | HASH}
algorithm_option:
ALGORITHM [=] {DEFAULT | INPLACE | COPY}
lock_option:
LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}
Thông thường, bạn tạo tất cả các chỉ mục trên bảng tại thời điểm bảng được tạo bằng
CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
2. Xem Phần & NBSP; 13.1.20, Tuyên bố Tạo bảng. Hướng dẫn này đặc biệt quan trọng đối với các bảng CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
3, trong đó khóa chính xác định bố cục vật lý của các hàng trong tệp dữ liệu. CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
4 cho phép bạn thêm các chỉ mục vào các bảng hiện có.
CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
4 được ánh xạ tới câu lệnh CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
6 để tạo các chỉ mục. Xem Phần & NBSP; 13.1.9, Tuyên bố bảng thay đổi. CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
4 không thể được sử dụng để tạo CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
8; sử dụng CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
6 thay thế. Để biết thêm thông tin về các chỉ mục, hãy xem Phần & NBSP; 8.3.1, Cách MySQL sử dụng các chỉ mục.
CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
3 hỗ trợ các chỉ mục thứ cấp trên các cột ảo. Để biết thêm thông tin, xem Phần & NBSP; 13.1.20.9, Chỉ mục thứ cấp và các cột được tạo.Khi cài đặt
INDEX [[col1 + col2], [col3 - col4]]
1 được bật, hãy chạy câu lệnh INDEX [[col1 + col2], [col3 - col4]]
2 cho bảng CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
3 sau khi tạo một chỉ mục trên bảng đó.Bắt đầu với MySQL 8.0.17,
INDEX [[col1 + col2], [col3 - col4]]
4 cho thông số kỹ thuật INDEX [[col1 + col2], [col3 - col4]]
5 có thể lấy mẫu INDEX [[col1 + col2], [col3 - col4]]
6 dưới dạng mảng INDEX [[col1 + col2], [col3 - col4]]
7] để tạo chỉ mục đa giá trị trên cột INDEX [[col1 + col2], [col3 - col4]]
8. Xem các chỉ mục đa giá trị.Một đặc tả chỉ mục của mẫu
INDEX [[col1 + col2], [col3 - col4]]
9, INDEX [col1 + col2, col3 - col4]
0, ...] tạo một chỉ mục với nhiều phần chính. Các giá trị khóa chỉ mục được hình thành bằng cách kết hợp các giá trị của các phần khóa đã cho. Ví dụ INDEX [col1 + col2, col3 - col4]
1 chỉ định một chỉ mục nhiều cột với các khóa chỉ mục bao gồm các giá trị từ INDEX [col1 + col2, col3 - col4]
2, INDEX [col1 + col2, col3 - col4]
3 và INDEX [col1 + col2, col3 - col4]
4.Thông số kỹ thuật
INDEX [[col1 + col2], [col3 - col4]]
5 có thể kết thúc bằng INDEX [col1 + col2, col3 - col4]
6 hoặc INDEX [col1 + col2, col3 - col4]
7 để chỉ định xem các giá trị chỉ mục có được lưu trữ theo thứ tự tăng dần hay giảm dần hay không. Mặc định là tăng dần nếu không có trình xác định đơn hàng nào được đưa ra. INDEX [col1 + col2, col3 - col4]
6 và INDEX [col1 + col2, col3 - col4]
7 không được phép cho các chỉ mục INDEX [[col1], [col2]]
0. INDEX [col1 + col2, col3 - col4]
6 và INDEX [col1 + col2, col3 - col4]
7 cũng không được hỗ trợ cho các chỉ mục đa giá trị. Kể từ MySQL 8.0.12, INDEX [col1 + col2, col3 - col4]
6 và INDEX [col1 + col2, col3 - col4]
7 không được phép cho các chỉ mục INDEX [[col1], [col2]]
5.Các phần sau đây mô tả các khía cạnh khác nhau của tuyên bố
CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
4:Các bộ phận khóa tiền tố cột
Các bộ phận khóa chức năng
Chỉ số độc đáo
Chỉ số toàn văn
Chỉ số đa giá trị
Chỉ số không gian
Tùy chọn chỉ mục
Tùy chọn sao chép và khóa bảng
Các bộ phận khóa tiền tố cột
Các bộ phận khóa chức năng
Chỉ số độc đáo
Chỉ số toàn vănmust be specified for
3 andINDEX [col1, col2]
4 key parts. Additionally,INDEX [col1, col2]
3 andINDEX [col1, col2]
4 columns can be indexed only forINDEX [col1, col2]
3,CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
8, andINDEX [col1, col2]
9 tables.INDEX [col1, col2]
Chỉ số đa giá trịlimits are measured in bytes. However, prefix lengths for index specifications in
0,CREATE TABLE tbl [ col1 LONGTEXT, INDEX idx1 [[SUBSTRING[col1, 1, 10]]] ]; SELECT * FROM tbl WHERE SUBSTRING[col1, 1, 9] = '123456789'; SELECT * FROM tbl WHERE SUBSTRING[col1, 1, 10] = '1234567890';
6, andCREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
4 statements are interpreted as number of characters for nonbinary string types [CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
9,INDEX [[col1], [col2]]
0,INDEX [col1, col2]
4] and number of bytes for binary string types [INDEX [col1, col2]
1,INDEX [col1, col2]
2,INDEX [col1, col2]
3]. Take this into account when specifying a prefix length for a nonbinary string column that uses a multibyte character set.INDEX [col1, col2]
Chỉ số không gian
Tùy chọn chỉ mục
Tùy chọn sao chép và khóa bảng
Đối với các cột chuỗi, các chỉ mục có thể được tạo chỉ sử dụng phần hàng đầu của các giá trị cột, sử dụng cú pháp ________ 67 [____ 68] để chỉ định độ dài tiền tố chỉ mục:
Các tiền tố có thể được chỉ định cho các phần chính
INDEX [[col1], [col2]]
9, INDEX [col1, col2]
0, INDEX [col1, col2]
1 và INDEX [col1, col2]
2.CREATE INDEX part_of_name ON customer [name[10]];
Tiền tố phải được chỉ định cho các phần chính
INDEX [col1, col2]
3 và INDEX [col1, col2]
4. Ngoài ra, các cột INDEX [col1, col2]
3 và INDEX [col1, col2]
4 chỉ có thể được lập chỉ mục cho các bảng CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
3, INDEX [col1, col2]
8 và INDEX [col1, col2]
9.Các bộ phận khóa chức năng
Chỉ số chỉ số của người Viking chỉ số các giá trị cột hoặc tiền tố của các giá trị cột. Ví dụ: trong bảng sau, mục nhập chỉ mục cho một hàng
CREATE INDEX part_of_name ON customer [name[10]];
02 đã cho bao gồm toàn bộ giá trị INDEX [col1 + col2, col3 - col4]
2 và tiền tố của giá trị INDEX [col1 + col2, col3 - col4]
3 bao gồm 10 ký tự đầu tiên của nó:“normal” index indexes column values
or prefixes of column values. For example, in the following table, the index entry for a given CREATE INDEX part_of_name ON customer [name[10]];
02 row includes the full INDEX [col1 + col2, col3 - col4]
2 value and a prefix of the INDEX [col1 + col2, col3 - col4]
3 value consisting of its first 10 characters: CREATE TABLE t1 [
col1 VARCHAR[10],
col2 VARCHAR[20],
INDEX [col1, col2[10]]
];
MySQL 8.0.13 và hỗ trợ cao hơn các phần khóa chức năng mà các giá trị biểu thức chỉ mục thay vì các giá trị tiền tố cột hoặc cột. Việc sử dụng các phần khóa chức năng cho phép lập chỉ mục các giá trị không được lưu trữ trực tiếp trong bảng. Ví dụ:
CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
Một chỉ mục với nhiều phần chính có thể trộn các phần khóa không chức năng và chức năng.
INDEX [col1 + col2, col3 - col4]
6 và INDEX [col1 + col2, col3 - col4]
7 được hỗ trợ cho các phần khóa chức năng.Các phần khóa chức năng phải tuân thủ các quy tắc sau. Một lỗi xảy ra nếu một định nghĩa phần chính chứa các cấu trúc không được phép.
Trong các định nghĩa chỉ số, bao gồm các biểu thức trong ngoặc đơn để phân biệt chúng với các cột hoặc tiền tố cột. Ví dụ, điều này được cho phép; Các biểu thức được đặt trong khoảng dấu ngoặc đơn:
INDEX [[col1 + col2], [col3 - col4]]
Điều này tạo ra một lỗi; Các biểu thức không được đặt trong ngoặc đơn:
INDEX [col1 + col2, col3 - col4]
Một phần khóa chức năng không thể chỉ bao gồm một tên cột. Ví dụ, điều này không được phép:
INDEX [[col1], [col2]]
Thay vào đó, hãy viết các phần chính như các phần khóa không chức năng, không có dấu ngoặc đơn:
INDEX [col1, col2]
Một biểu thức phần khóa chức năng không thể tham khảo các tiền tố cột. Đối với một cách giải quyết, hãy xem cuộc thảo luận về
07 vàCREATE INDEX part_of_name ON customer [name[10]];
08 sau trong phần này.CREATE INDEX part_of_name ON customer [name[10]];
Các bộ phận khóa chức năng không được phép trong các thông số kỹ thuật quan trọng của nước ngoài.
Đối với
CREATE INDEX part_of_name ON customer [name[10]];
09, bảng đích lưu giữ các phần khóa chức năng từ bảng gốc.Các chỉ mục chức năng được triển khai dưới dạng các cột được tạo ảo ẩn, có những hàm ý này:
Mỗi phần khóa chức năng được tính theo giới hạn trên tổng số cột bảng; Xem Phần & NBSP; 8.4.7, Giới hạn trên số đếm cột và kích thước hàng.
Các bộ phận khóa chức năng kế thừa tất cả các hạn chế áp dụng cho các cột được tạo. Ví dụ:
Chỉ các chức năng được phép cho các cột được tạo mới được phép cho các phần khóa chức năng.
Các mục tiêu con, tham số, biến, chức năng được lưu trữ và các hàm có thể tải không được phép.
Để biết thêm thông tin về các hạn chế áp dụng, xem Phần & NBSP; 13.1.20.8, Bảng Tạo bảng và các cột được tạo, và Phần & NBSP; 13.1.9.2, Bảng thay đổi và các cột được tạo.
Cột được tạo ảo không yêu cầu lưu trữ. Bản thân chỉ mục chiếm không gian lưu trữ như bất kỳ chỉ mục nào khác.
CREATE INDEX part_of_name ON customer [name[10]];
10 được hỗ trợ cho các chỉ mục bao gồm các phần khóa chức năng. Tuy nhiên, các khóa chính không thể bao gồm các phần khóa chức năng. Một khóa chính yêu cầu cột được tạo được lưu trữ, nhưng các phần khóa chức năng được triển khai dưới dạng các cột được tạo ảo, không được lưu trữ các cột được tạo.Các chỉ mục
INDEX [[col1], [col2]]
5 và CREATE INDEX part_of_name ON customer [name[10]];
12 không thể có các phần khóa chức năng.Nếu một bảng không chứa khóa chính,
CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
3 sẽ tự động quảng bá chỉ mục CREATE INDEX part_of_name ON customer [name[10]];
14 đầu tiên lên khóa chính. Điều này không được hỗ trợ cho các chỉ mục CREATE INDEX part_of_name ON customer [name[10]];
15 có các phần khóa chức năng.Các chỉ số không chức năng nêu ra một cảnh báo nếu có các chỉ mục trùng lặp. Các chỉ mục có chứa các bộ phận khóa chức năng không có tính năng này.
Để loại bỏ một cột được tham chiếu bởi một phần khóa chức năng, chỉ mục phải được xóa trước. Nếu không, một lỗi xảy ra.
Mặc dù các bộ phận khóa không chức năng hỗ trợ đặc tả độ dài tiền tố, nhưng điều này là không thể đối với các phần khóa chức năng. Giải pháp là sử dụng
CREATE INDEX part_of_name ON customer [name[10]];
07 [hoặc CREATE INDEX part_of_name ON customer [name[10]];
08, như được mô tả sau trong phần này]. Đối với phần khóa chức năng chứa hàm CREATE INDEX part_of_name ON customer [name[10]];
07 được sử dụng trong truy vấn, mệnh đề CREATE INDEX part_of_name ON customer [name[10]];
19 phải chứa CREATE INDEX part_of_name ON customer [name[10]];
07 với cùng một đối số. Trong ví dụ sau, chỉ có CREATE INDEX part_of_name ON customer [name[10]];
21 thứ hai có thể sử dụng chỉ mục vì đó là truy vấn duy nhất trong đó các đối số với CREATE INDEX part_of_name ON customer [name[10]];
07 khớp với đặc tả chỉ mục:CREATE TABLE tbl [
col1 LONGTEXT,
INDEX idx1 [[SUBSTRING[col1, 1, 10]]]
];
SELECT * FROM tbl WHERE SUBSTRING[col1, 1, 9] = '123456789';
SELECT * FROM tbl WHERE SUBSTRING[col1, 1, 10] = '1234567890';
Các phần khóa chức năng cho phép lập chỉ mục các giá trị không thể được lập chỉ mục khác, chẳng hạn như các giá trị
INDEX [[col1 + col2], [col3 - col4]]
8. Tuy nhiên, điều này phải được thực hiện chính xác để đạt được hiệu ứng mong muốn. Ví dụ, cú pháp này không hoạt động:CREATE TABLE employees [
data JSON,
INDEX [[data->>'$.name']]
];
Cú pháp thất bại vì:
Toán tử
24 chuyển thànhCREATE INDEX part_of_name ON customer [name[10]];
25.CREATE INDEX part_of_name ON customer [name[10]];
26 Trả về một giá trị với loại dữ liệu làCREATE INDEX part_of_name ON customer [name[10]];
27 và cột được tạo ẩn do đó được gán cùng một loại dữ liệu.CREATE INDEX part_of_name ON customer [name[10]];
MySQL không thể lập chỉ mục các cột
27 được chỉ định mà không có độ dài tiền tố trên phần chính và độ dài tiền tố không được phép trong các phần khóa chức năng.CREATE INDEX part_of_name ON customer [name[10]];
Để lập chỉ mục cột
INDEX [[col1 + col2], [col3 - col4]]
8, bạn có thể thử sử dụng hàm CREATE INDEX part_of_name ON customer [name[10]];
08 như sau:CREATE INDEX part_of_name ON customer [name[10]];
0Cột được tạo ẩn được gán kiểu dữ liệu
CREATE INDEX part_of_name ON customer [name[10]];
31, có thể được lập chỉ mục. Nhưng phương pháp này tạo ra một vấn đề mới khi cố gắng sử dụng chỉ mục:
08 Trả về một chuỗi với đối chiếuCREATE INDEX part_of_name ON customer [name[10]];
33 [đối chiếu mặc định máy chủ].CREATE INDEX part_of_name ON customer [name[10]];
26 Trả về một chuỗi với đối chiếuCREATE INDEX part_of_name ON customer [name[10]];
35 [mã hóa cứng].CREATE INDEX part_of_name ON customer [name[10]];
Kết quả là, có sự không phù hợp đối chiếu giữa biểu thức được lập chỉ mục trong định nghĩa bảng trước và biểu thức mệnh đề
CREATE INDEX part_of_name ON customer [name[10]];
19 trong truy vấn sau:CREATE INDEX part_of_name ON customer [name[10]];
1Chỉ số không được sử dụng vì các biểu thức trong truy vấn và chỉ số khác nhau. Để hỗ trợ loại kịch bản này cho các bộ phận khóa chức năng, trình tối ưu hóa sẽ tự động dải
CREATE INDEX part_of_name ON customer [name[10]];
08 khi tìm kiếm một chỉ mục để sử dụng, nhưng chỉ khi việc đối chiếu biểu thức được lập chỉ mục khớp với biểu thức truy vấn. Đối với một chỉ mục có phần khóa chức năng được sử dụng, một trong hai giải pháp sau đây hoạt động [mặc dù chúng khác nhau có hiệu lực]:only if the collation of the indexed expression matches that of the query expression. For an index with a functional key part to be used, either of the following two solutions work [although they differ
somewhat in effect]: Giải pháp 1. Gán biểu thức được lập chỉ mục cùng đối chiếu như
26:CREATE INDEX part_of_name ON customer [name[10]];
2CREATE INDEX part_of_name ON customer [name[10]];
Toán tử
24 giống nhưCREATE INDEX part_of_name ON customer [name[10]];
25 vàCREATE INDEX part_of_name ON customer [name[10]];
26 trả về một chuỗi với đối chiếuCREATE INDEX part_of_name ON customer [name[10]];
35. Do đó, so sánh là nhạy cảm trường hợp và chỉ có một hàng khớp:CREATE INDEX part_of_name ON customer [name[10]];
3CREATE INDEX part_of_name ON customer [name[10]];
Giải pháp 2. Chỉ định biểu thức đầy đủ trong truy vấn:
4CREATE INDEX part_of_name ON customer [name[10]];
08 Trả về một chuỗi với đối chiếuCREATE INDEX part_of_name ON customer [name[10]];
33, do đó, độ nhạy của trường hợp so sánh và hai hàng khớp:CREATE INDEX part_of_name ON customer [name[10]];
5CREATE INDEX part_of_name ON customer [name[10]];
Xin lưu ý rằng mặc dù trình tối ưu hóa hỗ trợ tự động tước
CREATE INDEX part_of_name ON customer [name[10]];
08 với các cột được tạo được lập chỉ mục, cách tiếp cận sau không hoạt động vì nó tạo ra kết quả khác có và không có chỉ mục [Bug#27337092]:CREATE INDEX part_of_name ON customer [name[10]];
6Chỉ số độc đáo
Chỉ số
CREATE INDEX part_of_name ON customer [name[10]];
10 tạo ra một ràng buộc sao cho tất cả các giá trị trong chỉ mục phải khác biệt. Lỗi xảy ra nếu bạn cố gắng thêm một hàng mới với giá trị khóa phù hợp với hàng hiện có. Nếu bạn chỉ định giá trị tiền tố cho một cột trong chỉ mục CREATE INDEX part_of_name ON customer [name[10]];
10, các giá trị cột phải là duy nhất trong độ dài tiền tố. Chỉ số CREATE INDEX part_of_name ON customer [name[10]];
10 cho phép nhiều giá trị CREATE INDEX part_of_name ON customer [name[10]];
49 cho các cột có thể chứa CREATE INDEX part_of_name ON customer [name[10]];
49.Nếu một bảng có chỉ số
CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
8 hoặc CREATE INDEX part_of_name ON customer [name[10]];
15 bao gồm một cột duy nhất có loại số nguyên, bạn có thể sử dụng CREATE INDEX part_of_name ON customer [name[10]];
53 để tham khảo cột được lập chỉ mục trong các câu lệnh CREATE INDEX part_of_name ON customer [name[10]];
21, như sau:
53 đề cập đến cộtCREATE INDEX part_of_name ON customer [name[10]];
56 nếu cóCREATE INDEX part_of_name ON customer [name[10]];
56 bao gồm một cột số nguyên duy nhất. Nếu cóCREATE INDEX part_of_name ON customer [name[10]];
8 nhưng nó không bao gồm một cột số nguyên duy nhất,CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
53 không thể được sử dụng.CREATE INDEX part_of_name ON customer [name[10]];
Mặt khác,
53 đề cập đến cột trong chỉ sốCREATE INDEX part_of_name ON customer [name[10]];
15 đầu tiên nếu chỉ mục đó bao gồm một cột số nguyên duy nhất. Nếu chỉ sốCREATE INDEX part_of_name ON customer [name[10]];
15 đầu tiên không bao gồm một cột số nguyên duy nhất,CREATE INDEX part_of_name ON customer [name[10]];
53 không thể được sử dụng.CREATE INDEX part_of_name ON customer [name[10]];
Chỉ số đa giá trị
Kể từ MySQL 8.0.17,
CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
3 hỗ trợ các chỉ mục đa giá trị. Chỉ mục đa giá trị là một chỉ mục thứ cấp được xác định trên một cột lưu trữ một mảng các giá trị. Một chỉ số bình thường của người Viking có một bản ghi chỉ số cho mỗi bản ghi dữ liệu [1: 1]. Một chỉ mục đa giá trị có thể có nhiều bản ghi chỉ mục cho một bản ghi dữ liệu duy nhất [n: 1]. Các chỉ mục đa giá trị được dự định để lập chỉ mục các mảng INDEX [[col1 + col2], [col3 - col4]]
8. Ví dụ: một chỉ mục đa giá trị được xác định trên mảng mã zip trong tài liệu JSON sau đây tạo một bản ghi chỉ mục cho mỗi mã zip, với mỗi bản ghi chỉ mục tham chiếu cùng một bản ghi dữ liệu.“normal” index has one index record for each data record [1:1]. A multi-valued index can have multiple index records for a single data record [N:1]. Multi-valued indexes are intended for indexing INDEX [[col1 + col2], [col3 - col4]]
8 arrays. For example, a multi-valued index defined on the array of zip codes in the following JSON document creates an index record for each zip code, with each index record referencing the same data record. CREATE INDEX part_of_name ON customer [name[10]];
7Tạo các chỉ mục đa giá trịBạn có thể tạo một chỉ mục đa giá trị trong câu lệnh
CREATE INDEX part_of_name ON customer [name[10]];
66, CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
6 hoặc CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
4. Điều này yêu cầu sử dụng CREATE INDEX part_of_name ON customer [name[10]];
69 trong định nghĩa chỉ số, đưa ra các giá trị vô hướng được gõ bằng một mảng INDEX [[col1 + col2], [col3 - col4]]
8 vào mảng kiểu dữ liệu SQL. Một cột ảo sau đó được tạo trong suốt với các giá trị trong mảng kiểu dữ liệu SQL; Cuối cùng, một chỉ mục chức năng [còn được gọi là chỉ mục ảo] được tạo trên cột ảo. Đây là chỉ mục chức năng được xác định trên cột ảo của các giá trị từ mảng kiểu dữ liệu SQL tạo thành chỉ mục đa giá trị.Các ví dụ trong danh sách sau đây cho thấy ba cách khác nhau trong đó chỉ mục đa giá trị
CREATE INDEX part_of_name ON customer [name[10]];
71 có thể được tạo trên một mảng CREATE INDEX part_of_name ON customer [name[10]];
72 trên cột INDEX [[col1 + col2], [col3 - col4]]
8 CREATE INDEX part_of_name ON customer [name[10]];
74 trong một bảng có tên CREATE INDEX part_of_name ON customer [name[10]];
75. Trong mỗi trường hợp, mảng JSON được chuyển vào một mảng kiểu dữ liệu SQL của các giá trị số nguyên CREATE INDEX part_of_name ON customer [name[10]];
76.
66 chỉ:CREATE INDEX part_of_name ON customer [name[10]];
8CREATE INDEX part_of_name ON customer [name[10]];
66 cộng vớiCREATE INDEX part_of_name ON customer [name[10]];
79:CREATE INDEX part_of_name ON customer [name[10]];
9CREATE INDEX part_of_name ON customer [name[10]];
66 cộng vớiCREATE INDEX part_of_name ON customer [name[10]];
81:CREATE INDEX part_of_name ON customer [name[10]];
0CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Một chỉ số đa giá trị cũng có thể được định nghĩa là một phần của chỉ số tổng hợp. Ví dụ này cho thấy một chỉ số tổng hợp bao gồm hai phần có giá trị đơn [cho các cột
CREATE INDEX part_of_name ON customer [name[10]];
82 và CREATE INDEX part_of_name ON customer [name[10]];
83] và một phần đa giá trị [cho cột CREATE INDEX part_of_name ON customer [name[10]];
74]:CREATE TABLE t1 [
col1 VARCHAR[10],
col2 VARCHAR[20],
INDEX [col1, col2[10]]
];
1Chỉ có thể sử dụng một phần khóa đa giá trị có thể được sử dụng trong một chỉ số tổng hợp. Phần khóa đa giá trị có thể được sử dụng theo bất kỳ thứ tự nào so với các phần khác của khóa. Nói cách khác, câu lệnh
CREATE INDEX part_of_name ON customer [name[10]];
85 vừa được hiển thị có thể đã sử dụng CREATE INDEX part_of_name ON customer [name[10]];
86 [hoặc bất kỳ thứ tự nào khác] và vẫn còn hợp lệ.Sử dụng các chỉ mục đa giá trịTrình tối ưu hóa sử dụng chỉ mục đa giá trị để tìm nạp các bản ghi khi các chức năng sau được chỉ định trong mệnh đề
CREATE INDEX part_of_name ON customer [name[10]];
19:
88CREATE INDEX part_of_name ON customer [name[10]];
89CREATE INDEX part_of_name ON customer [name[10]];
90CREATE INDEX part_of_name ON customer [name[10]];
Chúng ta có thể chứng minh điều này bằng cách tạo và điền vào bảng
CREATE INDEX part_of_name ON customer [name[10]];
75 bằng cách sử dụng các câu lệnh CREATE INDEX part_of_name ON customer [name[10]];
66 và CREATE INDEX part_of_name ON customer [name[10]];
01 sau:CREATE TABLE t1 [
col1 VARCHAR[10],
col2 VARCHAR[20],
INDEX [col1, col2[10]]
];
2Đầu tiên, chúng tôi thực thi ba truy vấn trên bảng
CREATE INDEX part_of_name ON customer [name[10]];
75, mỗi truy cập sử dụng CREATE INDEX part_of_name ON customer [name[10]];
88, CREATE INDEX part_of_name ON customer [name[10]];
89 và CREATE INDEX part_of_name ON customer [name[10]];
90, với kết quả từ mỗi truy vấn được hiển thị ở đây:CREATE TABLE t1 [
col1 VARCHAR[10],
col2 VARCHAR[20],
INDEX [col1, col2[10]]
];
3Tiếp theo, chúng tôi chạy
CREATE INDEX part_of_name ON customer [name[10]];
98 trên mỗi ba truy vấn trước đó:CREATE TABLE t1 [
col1 VARCHAR[10],
col2 VARCHAR[20],
INDEX [col1, col2[10]]
];
4Không ai trong ba truy vấn chỉ hiển thị có thể sử dụng bất kỳ khóa nào. Để giải quyết vấn đề này, chúng tôi có thể thêm một chỉ mục đa giá trị trên mảng
CREATE INDEX part_of_name ON customer [name[10]];
99 trong cột INDEX [[col1 + col2], [col3 - col4]]
8 [CREATE INDEX part_of_name ON customer [name[10]];
74], như thế này:CREATE TABLE t1 [
col1 VARCHAR[10],
col2 VARCHAR[20],
INDEX [col1, col2[10]]
];
5Khi chúng tôi chạy lại các câu lệnh
CREATE INDEX part_of_name ON customer [name[10]];
98 trước đó, giờ đây chúng tôi có thể quan sát rằng các truy vấn có thể [và làm] sử dụng chỉ mục CREATE INDEX part_of_name ON customer [name[10]];
71 vừa được tạo:CREATE TABLE t1 [
col1 VARCHAR[10],
col2 VARCHAR[20],
INDEX [col1, col2[10]]
];
6Một chỉ mục đa giá trị có thể được định nghĩa là một khóa duy nhất. Nếu được xác định là một khóa duy nhất, cố gắng chèn một giá trị đã có trong chỉ mục đa giá trị trả về một lỗi khóa trùng lặp. Nếu các giá trị trùng lặp đã có mặt, cố gắng thêm một chỉ mục đa giá trị duy nhất không thành công, như được hiển thị ở đây:
CREATE TABLE t1 [
col1 VARCHAR[10],
col2 VARCHAR[20],
INDEX [col1, col2[10]]
];
7Đặc điểm của các chỉ mục đa giá trịCác chỉ mục đa giá trị có các đặc điểm bổ sung được liệt kê ở đây:
Các hoạt động DML ảnh hưởng đến các chỉ mục đa giá trị được xử lý theo cách tương tự như các hoạt động DML ảnh hưởng đến chỉ số bình thường, với sự khác biệt duy nhất là có thể có nhiều hơn một lần chèn hoặc cập nhật cho một bản ghi chỉ mục phân cụm duy nhất.
Khả năng vô tính và các chỉ mục đa giá trị:
Nếu phần khóa đa giá trị có một mảng trống, không có mục nào được thêm vào chỉ mục và bản ghi dữ liệu không thể truy cập được bằng cách quét chỉ mục.
Nếu thế hệ phần khóa đa giá trị trả về giá trị
49, một mục nhập duy nhất chứaCREATE INDEX part_of_name ON customer [name[10]];
49 sẽ được thêm vào chỉ mục đa giá trị. Nếu phần chính được định nghĩa làCREATE INDEX part_of_name ON customer [name[10]];
06, một lỗi được báo cáo.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Nếu cột mảng gõ được đặt thành
49, công cụ lưu trữ sẽ lưu trữ một bản ghi duy nhất chứaCREATE INDEX part_of_name ON customer [name[10]];
49 trỏ đến bản ghi dữ liệu.CREATE INDEX part_of_name ON customer [name[10]];
8 Các giá trị NULL không được phép trong các mảng được lập chỉ mục. Nếu bất kỳ giá trị trả về nào làINDEX [[col1 + col2], [col3 - col4]]
49, nó được coi là một null JSON và lỗi giá trị JSON không hợp lệ được báo cáo.Invalid JSON value error is reported.CREATE INDEX part_of_name ON customer [name[10]];
Bởi vì các chỉ mục đa giá trị là các chỉ mục ảo trên các cột ảo, chúng phải tuân thủ các quy tắc giống như các chỉ mục thứ cấp trên các cột được tạo ảo.
Hồ sơ chỉ số không được thêm vào cho các mảng trống.
Các chỉ mục đa giá trị phải tuân theo các hạn chế và hạn chế được liệt kê ở đây:
Chỉ được phép một phần khóa đa giá trị được cho phép trên mỗi chỉ mục đa giá trị. Tuy nhiên, biểu thức
11 có thể tham khảo nhiều mảng trong tài liệuCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
8, như được hiển thị ở đây:INDEX [[col1 + col2], [col3 - col4]]
8CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Trong trường hợp này, tất cả các giá trị khớp với biểu thức JSON được lưu trữ trong chỉ mục dưới dạng một mảng phẳng duy nhất.
Một chỉ mục có phần khóa đa giá trị không hỗ trợ đặt hàng và do đó không thể được sử dụng làm khóa chính. Vì lý do tương tự, một chỉ mục đa giá trị không thể được xác định bằng cách sử dụng từ khóa
6 hoặcINDEX [col1 + col2, col3 - col4]
7.INDEX [col1 + col2, col3 - col4]
Một chỉ mục đa giá trị không thể là một chỉ mục bảo hiểm.
Số lượng giá trị tối đa cho mỗi bản ghi cho một chỉ số đa giá trị được xác định bởi lượng dữ liệu có thể được lưu trữ trên một trang nhật ký hoàn tác, là 65221 byte [64K trừ 315 byte cho chi phí Độ dài của các giá trị chính cũng là 65221 byte. Số lượng phím tối đa phụ thuộc vào các yếu tố khác nhau, ngăn chặn việc xác định giới hạn cụ thể. Các thử nghiệm đã chỉ ra một chỉ số đa giá trị để cho phép có tới 1604 khóa số nguyên cho mỗi bản ghi, ví dụ. Khi đạt đến giới hạn, một lỗi tương tự như sau được báo cáo: Lỗi 3905 [HY000]: vượt quá số lượng giá trị tối đa trên mỗi bản ghi cho chỉ mục đa giá trị 'IDX' bằng 1 giá trị.ERROR 3905 [HY000]: Exceeded max number of values per record for multi-valued index 'idx' by 1 value[s].
Loại biểu thức duy nhất được phép trong một phần khóa đa giá trị là biểu thức
8. Biểu thức không cần tham khảo một phần tử hiện có trong tài liệu JSON được chèn vào cột được lập chỉ mục, mà phải tự mình có hiệu lực về mặt cú pháp.INDEX [[col1 + col2], [col3 - col4]]
Bởi vì các bản ghi chỉ mục cho cùng một bản ghi chỉ mục được phân phối được phân tán trong toàn bộ chỉ mục đa giá trị, nên chỉ mục đa giá trị không hỗ trợ quét phạm vi hoặc quét chỉ có chỉ mục.
Các chỉ mục đa giá trị không được phép trong các thông số kỹ thuật quan trọng của nước ngoài.
Tiền tố chỉ mục không thể được xác định cho các chỉ mục đa giá trị.
Các chỉ mục đa giá trị không thể được xác định trên dữ liệu được đúc là
1 [xem mô tả của hàmINDEX [col1, col2]
08].CREATE INDEX part_of_name ON customer [name[10]];
Việc tạo trực tuyến một chỉ số đa giá trị không được hỗ trợ, điều đó có nghĩa là hoạt động sử dụng
18. Xem các yêu cầu về hiệu suất và không gian.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Các bộ ký tự và đối chiếu khác với hai kết hợp sau của bộ ký tự và đối chiếu không được hỗ trợ cho các chỉ mục đa giá trị:
Ký tự
19 được đặt với bộ đối chiếuCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
19 mặc địnhCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Ký tự
21 được đặt với đối chiếuCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
22 mặc định.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Cũng như các chỉ mục khác trên các cột của bảng
3, một chỉ mục đa giá trị không thể được tạo bằngCREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
24; Cố gắng thực hiện như vậy dẫn đến cảnh báo: Công cụ lưu trữ này không hỗ trợ thuật toán chỉ mục băm, mặc định công cụ lưu trữ đã được sử dụng thay thế. [CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
25 được hỗ trợ như bình thường.]This storage engine does not support the HASH index algorithm, storage engine default was used instead. [CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
25 is supported as usual.]CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Chỉ số không gian
Các công cụ lưu trữ
INDEX [col1, col2]
8, CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
3, CREATE TABLE employees [
data JSON,
INDEX [[data->>'$.name']]
];
6 và CREATE TABLE t1 [
col1 VARCHAR[10],
col2 VARCHAR[20],
INDEX [col1, col2[10]]
];
29 hỗ trợ các cột không gian như CREATE TABLE t1 [
col1 VARCHAR[10],
col2 VARCHAR[20],
INDEX [col1, col2[10]]
];
30 và CREATE TABLE t1 [
col1 VARCHAR[10],
col2 VARCHAR[20],
INDEX [col1, col2[10]]
];
31. . Các chỉ số không gian và không thường xuyên trên các cột không gian có sẵn theo các quy tắc sau.Các chỉ mục không gian trên các cột không gian có các đặc điểm này:
Chỉ có sẵn cho bảng
3 vàCREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
8. Chỉ địnhINDEX [col1, col2]
34 cho các công cụ lưu trữ khác dẫn đến lỗi.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Kể từ MySQL 8.0.12, một chỉ mục trên cột không gian phải là chỉ số
5. Do đó, từ khóaINDEX [[col1], [col2]]
5 là tùy chọn nhưng tiềm ẩn để tạo một chỉ mục trên một cột không gian.must be aINDEX [[col1], [col2]]
5 index. TheINDEX [[col1], [col2]]
5 keyword is thus optional but implicit for creating an index on a spatial column.INDEX [[col1], [col2]]
Chỉ có sẵn cho các cột không gian duy nhất. Một chỉ số không gian không thể được tạo ra trên nhiều cột không gian.
Các cột được lập chỉ mục phải là
37.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Độ dài tiền tố cột bị cấm. Độ rộng đầy đủ của mỗi cột được lập chỉ mục.
Không được phép cho một khóa chính hoặc chỉ mục duy nhất.
Các chỉ mục không có ngữ trên các cột không gian [được tạo bằng
CREATE TABLE t1 [
col1 VARCHAR[10],
col2 VARCHAR[20],
INDEX [col1, col2[10]]
];
38, CREATE INDEX part_of_name ON customer [name[10]];
10 hoặc CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]];
CREATE INDEX idx1 ON t1 [[col1 + col2]];
CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1];
ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
8] có những đặc điểm này:Được phép cho bất kỳ công cụ lưu trữ nào hỗ trợ các cột không gian ngoại trừ
29.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Các cột có thể là
49 trừ khi chỉ mục là khóa chính.CREATE INDEX part_of_name ON customer [name[10]];
Loại chỉ mục cho một chỉ số không phải là -____ ____ 65 phụ thuộc vào công cụ lưu trữ. Hiện tại, cây B được sử dụng.
Được phép cho một cột có thể có giá trị
49 chỉ cho các bảngCREATE INDEX part_of_name ON customer [name[10]];
3,CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
8 vàINDEX [col1, col2]
47.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Tùy chọn chỉ mục
Theo danh sách phần chính, các tùy chọn chỉ mục có thể được đưa ra. Giá trị
CREATE TABLE t1 [
col1 VARCHAR[10],
col2 VARCHAR[20],
INDEX [col1, col2[10]]
];
48 có thể là bất kỳ điều nào sau đây:
49CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Đối với các bảng
8,INDEX [col1, col2]
51 Tùy chọn chỉ định kích thước tính bằng byte để sử dụng cho các khối khóa chỉ mục. Giá trị được coi là một gợi ý; Một kích thước khác nhau có thể được sử dụng nếu cần thiết. Giá trịCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
51 được chỉ định cho một định nghĩa chỉ số riêng lẻ ghi đè giá trị cấp bảngCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
51.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
51 không được hỗ trợ ở cấp chỉ mục cho các bảngCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
3. Xem Phần & NBSP; 13.1.20, Tuyên bố Tạo bảng.CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
56CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Một số công cụ lưu trữ cho phép bạn chỉ định loại chỉ mục khi tạo một chỉ mục. Ví dụ:
9CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Bảng & NBSP; 13.1, Các loại chỉ mục trên mỗi công cụ lưu trữ, hiển thị các giá trị loại chỉ mục cho phép được hỗ trợ bởi các công cụ lưu trữ khác nhau. Trong trường hợp nhiều loại chỉ mục được liệt kê, loại đầu tiên là mặc định khi không có nhà xác định loại chỉ mục nào được đưa ra. Các công cụ lưu trữ không được liệt kê trong bảng không hỗ trợ mệnh đề
56 trong các định nghĩa chỉ số.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Bảng & NBSP; 13.1 & NBSP; Các loại chỉ mục trên mỗi công cụ lưu trữ
Công cụ lưu trữCác loại chỉ mục cho phép
3CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
8INDEX [col1, col2]
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
8INDEX [col1, col2]
________ 247/________ 263
0,INDEX [[col1], [col2]]
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
6CREATE TABLE employees [ data JSON, INDEX [[data->>'$.name']] ];
0,INDEX [[col1], [col2]]
59 [xem ghi chú trong văn bản]CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Điều khoản
56 không thể được sử dụng choCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
70 hoặc [trước thông số kỹ thuật của MySQL 8.0.12]CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
34. Thực hiện chỉ số toàn văn là phụ thuộc vào công cụ lưu trữ. Các chỉ số không gian được thực hiện dưới dạng chỉ số r-cây.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Nếu bạn chỉ định một loại chỉ mục không hợp lệ cho một công cụ lưu trữ nhất định, nhưng loại chỉ mục khác có sẵn mà động cơ có thể sử dụng mà không ảnh hưởng đến kết quả truy vấn, động cơ sử dụng loại có sẵn. Trình phân tích cú pháp nhận ra
72 là tên loại. Kể từ MySQL 8.0.12, điều này chỉ được phép đối với các chỉ mụcCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
5. Trước 8.0.12,INDEX [[col1], [col2]]
72 không thể được chỉ định cho bất kỳ công cụ lưu trữ nào.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Các chỉ mục
59 được thực hiện bởi công cụ lưu trữCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
6 dưới dạng chỉ mục T-Tree.CREATE TABLE employees [ data JSON, INDEX [[data->>'$.name']] ];
Ghi chú
Đối với các chỉ mục duy nhất bao gồm một hoặc nhiều cột
49 của bảngCREATE INDEX part_of_name ON customer [name[10]];
6, chỉ số băm chỉ có thể được sử dụng để tra cứu các giá trị theo nghĩa đen, điều đó có nghĩa là các điều kiệnCREATE TABLE employees [ data JSON, INDEX [[data->>'$.name']] ];
83 yêu cầu quét toàn bộ bảng. Một cách giải quyết là đảm bảo rằng một chỉ mục duy nhất sử dụng một hoặc nhiều cộtCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
49 trên bảng như vậy luôn được tạo theo cách mà nó bao gồm chỉ mục được đặt hàng; nghĩa là, tránh sử dụngCREATE INDEX part_of_name ON customer [name[10]];
24 khi tạo chỉ mục.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Nếu bạn chỉ định một loại chỉ mục không hợp lệ cho một công cụ lưu trữ nhất định, nhưng loại chỉ mục khác có sẵn mà động cơ có thể sử dụng mà không ảnh hưởng đến kết quả truy vấn, động cơ sử dụng loại có sẵn. Trình phân tích cú pháp nhận ra
72 là tên loại, nhưng hiện tại không thể chỉ định cho bất kỳ công cụ lưu trữ nào.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Ghi chú
Việc sử dụng tùy chọn
56 trước mệnh đềCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
88 bị phản đối; Mong đợi hỗ trợ sử dụng tùy chọn ở vị trí này sẽ bị xóa trong bản phát hành MySQL trong tương lai. Nếu tùy chọnCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
56 được đưa ra ở cả vị trí trước đó và sau đó, tùy chọn cuối cùng được áp dụng.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
90 được công nhận là từ đồng nghĩa vớiCREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
91. Tuy nhiên,CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
78 là hình thức ưa thích.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Các bảng sau đây hiển thị các đặc điểm chỉ mục cho các công cụ lưu trữ hỗ trợ tùy chọn
56.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Bảng & NBSP; 13.2 & NBSP; Đặc điểm chỉ số công cụ lưu trữ Innodb
Lớp chỉ mụcLoại chỉ mụcLưu trữ giá trị nullCho phép nhiều giá trị nullLà loại quét nullKhông phải là loại quét null Khóa chính
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a
12CREATE INDEX part_of_name ON customer [name[10]];
N/a Không Không N/a N/a
5INDEX [[col1], [col2]]
N/a Không Không N/a N/a Độc nhất
Lớp chỉ mụcLoại chỉ mụcLưu trữ giá trị nullCho phép nhiều giá trị nullLà loại quét nullKhông phải là loại quét null Khóa chính
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a
12CREATE INDEX part_of_name ON customer [name[10]];
N/a Không Không N/a N/a
5INDEX [[col1], [col2]]
N/a Không Không N/a N/a Độc nhất
Lớp chỉ mụcLoại chỉ mụcLưu trữ giá trị nullCho phép nhiều giá trị nullLà loại quét nullKhông phải là loại quét null Khóa chính
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Khóa chính
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
Lớp chỉ mụcLoại chỉ mụcLưu trữ giá trị nullCho phép nhiều giá trị nullLà loại quét nullKhông phải là loại quét null Khóa chính
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Khóa chính
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
59CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Không Không N/a N/a Độc nhất
Đúng
Mục lục
Chìa khóa
Bàn
Bảng & NBSP; 13.3 & NBSP; Đặc điểm chỉ số công cụ lưu trữ Myisam
Bảng & NBSP; 13.4 & NBSP; Đặc điểm chỉ số công cụ lưu trữ bộ nhớ
0CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
0INDEX [[col1], [col2]]
Bảng & NBSP; 13,5 & NBSP; Đặc điểm chỉ số công cụ lưu trữ NDB
Bảng [xem Lưu ý 1]
Bảng ghi chú:
1.
24 ngăn chặn việc tạo ra một chỉ số được đặt hàng ngầm.CREATE TABLE t1 [ col1 VARCHAR[10], col2 VARCHAR[20], INDEX [col1, col2[10]] ];
Các giá trị được phép là một chuỗi theo nghĩa đen chứa một tài liệu
8 hợp lệ hoặc một chuỗi trống ['']. Không hợp lệINDEX [[col1 + col2], [col3 - col4]]
8 bị từ chối.INDEX [[col1 + col2], [col3 - col4]]
1CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
Các giá trị
37 vàCREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
38 có thể được lặp lại mà không có lỗi. Trong trường hợp này, giá trị được chỉ định cuối cùng được sử dụng.CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
Các giá trị
37 vàCREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];
38 không được kiểm tra bởi máy chủ, chúng cũng không bị xóa khi công cụ lưu trữ của bảng được thay đổi.CREATE TABLE t1 [col1 INT, col2 INT, INDEX func_index [[ABS[col1]]]]; CREATE INDEX idx1 ON t1 [[col1 + col2]]; CREATE INDEX idx2 ON t1 [[col1 + col2], [col1 - col2], col1]; ALTER TABLE t1 ADD INDEX [[col1 * 40] DESC];