MySQL - INDEXES
Chỉ mục cơ sở dữ liệu là một cấu trúc dữ liệu cải thiện tốc độ của các hoạt động trong một bảng. Chỉ mục có thể được tạo bằng cách sử dụng một hoặc nhiều cột, cung cấp cơ sở cho cả tra cứu ngẫu nhiên nhanh chóng và sắp xếp thứ tự truy cập bản ghi hiệu quả.
Trong khi tạo chỉ mục, cần cân nhắc xem tất cả các cột nào sẽ được sử dụng để thực hiện các truy vấn SQL và tạo một hoặc nhiều chỉ mục trên các cột đó.
Trên thực tế, chỉ mục cũng là một loại bảng, giữ khóa chính hoặc trường chỉ mục và một con trỏ đến mỗi bản ghi vào bảng thực tế.
Người dùng không thể nhìn thấy các chỉ mục, chúng chỉ được sử dụng để tăng tốc các truy vấn và sẽ được Công cụ Tìm kiếm Cơ sở dữ liệu sử dụng để định vị các bản ghi rất nhanh.
Các câu lệnh INSERT và UPDATE mất nhiều thời gian hơn trên các bảng có chỉ mục, trong khi các câu lệnh SELECT trở nên nhanh chóng trên các bảng đó. Lý do là trong khi thực hiện chèn hoặc cập nhật, cơ sở dữ liệu cũng cần phải chèn hoặc cập nhật các giá trị chỉ mục.
Chỉ mục đơn giản và duy nhất
Bạn có thể tạo một chỉ mục duy nhất trên một bảng. Chỉ mục duy nhất có nghĩa là hai hàng không thể có cùng giá trị chỉ mục. Đây là cú pháp để tạo Chỉ mục trên bảng.
CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);
Bạn có thể sử dụng một hoặc nhiều cột để tạo chỉ mục.
Ví dụ: chúng ta có thể tạo chỉ mục trên tutorials_tbl sử dụng tutorial_author.
CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author)
Bạn có thể tạo một chỉ mục đơn giản trên một bảng. Chỉ cần bỏ quaUNIQUEtừ khóa từ truy vấn để tạo một chỉ mục đơn giản. Chỉ mục đơn giản cho phép các giá trị trùng lặp trong bảng.
Nếu bạn muốn lập chỉ mục các giá trị trong một cột theo thứ tự giảm dần, bạn có thể thêm từ dành riêng DESC sau tên cột.
mysql> CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author DESC)
Lệnh ALTER để thêm và thả INDEX
Có bốn loại câu lệnh để thêm chỉ mục vào bảng:
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) - Tuyên bố này bổ sung một PRIMARY KEY, có nghĩa là các giá trị được lập chỉ mục phải là duy nhất và không được NULL.
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) - Câu lệnh này tạo một chỉ mục mà các giá trị phải là duy nhất (ngoại trừ các giá trị NULL, có thể xuất hiện nhiều lần).
ALTER TABLE tbl_name ADD INDEX index_name (column_list) - Điều này thêm một chỉ mục thông thường trong đó bất kỳ giá trị nào có thể xuất hiện nhiều hơn một lần.
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) - Điều này tạo ra một chỉ mục FULLTEXT đặc biệt được sử dụng cho mục đích tìm kiếm văn bản.
Khối mã sau đây là một ví dụ để thêm chỉ mục trong một bảng hiện có.
mysql> ALTER TABLE testalter_tbl ADD INDEX (c);
Bạn có thể giảm bất kỳ INDEX nào bằng cách sử dụng DROP cùng với lệnh ALTER.
Hãy thử ví dụ sau để loại bỏ chỉ mục được tạo ở trên.
mysql> ALTER TABLE testalter_tbl DROP INDEX (c);
Bạn có thể bỏ bất kỳ INDEX nào bằng cách sử dụng mệnh đề DROP cùng với lệnh ALTER.
ALTER Lệnh để thêm và thả phím CHÍNH
Bạn cũng có thể thêm khóa chính theo cách tương tự. Nhưng hãy đảm bảo rằng Khóa chính hoạt động trên các cột KHÔNG ĐẦY ĐỦ.
Khối mã sau đây là một ví dụ để thêm khóa chính trong bảng hiện có. Điều này sẽ làm cho một cột KHÔNG ĐẦY ĐỦ trước và sau đó thêm nó làm khóa chính.
mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
Bạn có thể sử dụng lệnh ALTER để bỏ khóa chính như sau:
mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
Để bỏ một chỉ mục không phải là TỪ KHÓA CHÍNH, bạn phải chỉ định tên chỉ mục.
Hiển thị thông tin INDEX
Bạn có thể dùng SHOW INDEXlệnh liệt kê tất cả các chỉ mục được liên kết với một bảng. Đầu ra định dạng dọc (được chỉ định bởi \ G) thường hữu ích với câu lệnh này, để tránh một dòng dài dòng -
Hãy thử ví dụ sau:
mysql> SHOW INDEX FROM table_name\G
........