- Chuyên mục khác :
- Git cơ bản và nâng cao
- ·
- MySQL cơ bản và nâng cao
- ·
- MongoDB cơ bản và nâng cao
- ·
- SQL cơ bản và nâng cao
- ·
- Linux cơ bản và nâng cao
- Cơ bản về SQL
- Học SQL cơ bản và nâng cao
- SQL là gì
- Các khái niệm RDBMS trong SQL
- RDBMS Database trong SQL
- Cú pháp SQL cơ bản
- Kiểu dữ liệu trong SQL
- Toán tử trong SQL
- Biểu thức trong SQL
- SQL Database
- Lệnh CREATE DATABASE trong SQL
- Lệnh DROP Database trong SQL
- Lệnh SELECT DATABASE trong SQL
- Lệnh RENAME DATABASE trong SQL
- SQL Table
- CREATE Table trong SQL - Tạo bảng trong SQL
- Lệnh DROP Table trong SQL
- DELETE trong SQL
- Lệnh RENAME Table trong SQL
- Lệnh TRUNCATE TABLE trong SQL
- Lệnh ALTER TABLE trong SQL
- Mô phỏng bảng trong SQL
- Bảng tạm (Temporary Table) trong SQL
- Nhóm lệnh thao tác cơ bản
- UPDATE trong SQL
- Truy vấn INSERT trong SQL
- Truy vấn SELECT trong SQL
- Mệnh đề ORDER BY trong SQL
- Mệnh đề GROUP BY trong SQL
- Từ khóa DISTINCT trong SQL
- Sắp xếp kết quả trong SQL
- Mệnh đề trong SQL
- Mệnh đề WHERE trong SQL
- Toán tử liên hợp AND và OR trong SQL
- Mệnh đề With trong SQL
- Mệnh đề LIKE trong SQL
- Mệnh đề TOP, LIMIT, ROWNUM trong SQL
- Hoạt động SQL nâng cao
- Mệnh đề UNION trong SQL
- Giá trị NULL trong SQL
- Alias trong SQL
- Chỉ mục (Index) trong SQL
- Sử dụng View trong SQL
- Mệnh đề HAVING trong SQL
- Transaction trong SQL
- Toán tử wildcard trong SQL
- Truy vấn con trong SQL
- Sử dụng Sequence trong SQL
- Xử lý bản sao trong SQL (DISTINCT)
- Injection trong SQL
- Ràng buộc trong SQL
- Ràng buộc (Constraint) trong SQL
- Ràng buộc NOT NULL trong SQL
- Ràng buộc DEFAULT trong SQL
- Ràng buộc UNIQUE trong SQL
- Ràng buộc PRIMARY KEY trong SQL
- Ràng buộc FOREIGN KEY trong SQL
- Ràng buộc CHECK trong SQL
- Ràng buộc INDEX trong SQL
- SQL Join
- Mệnh đề JOINS trong SQL
- INNER JOIN trong SQL
- LEFT JOIN trong SQL
- RIGHT JOIN trong SQL
- FULL JOIN trong SQL
- SELF JOIN trong SQL
- CARTESIAN JOIN hoặc CROSS JOIN trong SQL
- Hàm trong SQL
- Hàm hữu ích trong SQL
- Hàm xử lý Date và Time trong SQL
- Hàm xử lý số trong SQL
- Hàm xử lý chuỗi trong SQL
- Tài liệu SQL tham khảo
- First Normal Form (1NF) trong SQL
- Second Normal Form (2NF) trong SQL
- Third Normal Form (3NF) trong SQL
- Tuning DB trong SQL
- Tài liệu SQL tham khảo
Chỉ mục (Index) là bảng tra cứu đặc biệt mà Database Search Engine có thể sử dụng để tăng nhanh thời gian và hiệu suất thu thập dữ liệu. Hiểu đơn giản, một chỉ mục là một con trỏ tới dữ liệu trong một bảng. Một chỉ mục trong một Database là tương tự như một chỉ mục trong Mục lục của cuốn sách.
Ví dụ, nếu bạn muốn tham chiếu tất cả các trang trong một cuốn sách về một chủ đề nào đó, đầu tiên bạn nghĩ ngay đến mục lục của nó, mà liệt kê tất cả các chương, chủ đề theo thứ tự và sau đó được tham chiếu tới một hoặc nhiều trang cụ thể.
Một chỉ mục giúp tăng tốc các truy vấn SELECT và các mệnh đề WHERE, nhưng nó làm chậm việc dữ liệu nhập vào, với các lệnh UPDATE và INSERT. Các chỉ mục có thể được tạo hoặc xóa mà không ảnh hưởng tới dữ liệu.
Tạo một chỉ mục bởi sử dụng lệnh CREATE INDEX, mà cho phép bạn đặt tên cho chỉ mục, xác định bảng và cột hoặc các cột nào để lập chỉ mục, và để chỉ dẫn chỉ mục là theo thứ tự tăng dần hoặc giảm dần.
Các chỉ mục cũng có thể là duy nhất, tương tự như ràng buộc UNIQUE, trong đó chỉ mục ngăn ngừa các bản sao của các bản ghi trong cột hoặc việc tổ hợp của các cột có chỉ mục.
Lệnh CREATE INDEX trong SQL
Cú pháp cơ bản của lệnh CREATE INDEX trong SQL là như sau:
CREATE INDEX ten_chi_muc ON ten_bang;
Single-Column Index trong SQL
Chỉ mục cho một cột đơn là một chỉ mục được tạo dựa trên chỉ một cột trong bảng. Cú pháp cơ bản là:
CREATE INDEX ten_chi_muc ON ten_bang (ten_cot);
Unique index trong SQL
Unique index được sử dụng không chỉ để tăng hiệu suất, mà còn cho mục đích toàn vẹn dữ liệu. Một Unique index không cho phép bất kỳ bản sao giá trị nào được chèn vào trong bảng. Cú pháp cơ bản là:
CREATE UNIQUE INDEX ten_chi_muc on ten_bang (ten_cot);
Composite Index trong SQL
Composite Index là một chỉ mục cho hai hoặc nhiều cột trong một bảng. Cú pháp cơ bản của nó như sau:
CREATE INDEX ten_chi_muc on ten_bang (cot1, cot2);
Việc tạo một Single-column index hoặc một Composite index tùy thuộc vào sự cân nhắc của bạn về các cột bạn có thể sử dụng thường xuyên trong mệnh đề WHERE của một truy vấn như là các điều kiện lọc.
Nếu chỉ có một cột được sử dụng, thì lựa chọn tốt nhất là Single-column index. Nếu có hai hoặc nhiều cột được sử dụng thường xuyên trong mệnh đề WHERE như là các bộ lọc, thì dạng chỉ mục Composite index là lựa chọn tối ưu.
Implicit Index trong SQL
Implicit Index (có thể hiểu là chỉ mục ngầm định) là chỉ mục mà được tạo tự động bởi Database Server khi một đối tượng được tạo. Các chỉ mục được tạo tự động cho các ràng buộc Primary key và các ràng buộc Unique. 2 dạng này sẽ được đánh là sử dụng dạng Btree.
Lệnh DROP INDEX trong SQL
Một chỉ mục có thể bị xóa bởi sử dụng lệnh DROP INDEX trong SQL. Bạn nên cẩn thận trong khi xóa một chỉ mục, bởi vì khi đó hiệu suất có thể chậm hơn hoặc không được cải thiện.
Cú pháp cơ bản của lệnh DROP INDEX là như sau:
DROP INDEX ten_chi_muc;
Bạn có thể tìm hiểu về Ràng buộc INDEX trong SQL để theo dõi các ví dụ về chỉ mục.
Khi nào nên tránh sử dụng chỉ mục trong SQL?
Mặc dù các chỉ mục nhằm mục đích để nâng cao hiệu suất của Database, nhưng đôi khi, bạn nên tránh dùng chúng. Dưới đây là một số điểm bạn cần xem xét để quyết định có nên sử dụng chỉ mục hay không:
-
Các chỉ mục không nên được sử dụng trong các bảng nhỏ.
-
Bảng mà thường xuyên có các hoạt động update, insert.
-
Các chỉ mục không nên được sử dụng trên các cột mà chứa một số lượng lớn giá trị NULL.
-
Không nên dùng chỉ mục trên các cột mà thường xuyên bị sửa đổi.
Các loại Index
Trong MySQL, có bốn loại chỉ mục (index) chính dựa trên các cấu trúc dữ liệu và thuật toán khác nhau: BTREE, HASH, RTREE, và FULLTEXT. Dưới đây là mô tả chi tiết về từng loại chỉ mục:
1. BTREE Index
- Mô tả: BTREE là loại chỉ mục mặc định trong MySQL và được sử dụng rộng rãi trong các bảng InnoDB và MyISAM. BTREE (Balanced Tree) là một cấu trúc cây cân bằng, cho phép tìm kiếm, chèn, xóa và duyệt dữ liệu một cách hiệu quả.
- Đặc điểm:
- Thích hợp cho các truy vấn tìm kiếm, sắp xếp và phạm vi (range queries).
- Hiệu quả cho các phép toán =, >, >=, <, <=, và BETWEEN.
- Sử dụng:
CREATE TABLE employees ( id INT AUTO_INCREMENT, name VARCHAR(100), email VARCHAR(100), PRIMARY KEY (id), INDEX name_index (name) ) ENGINE=InnoDB;
2. HASH Index
- Mô tả: HASH index sử dụng hàm băm để ánh xạ các giá trị khóa đến các vị trí chỉ mục. Loại chỉ mục này chỉ có sẵn trong các bảng sử dụng công cụ lưu trữ Memory (HEAP).
- Đặc điểm:
- Tối ưu cho các phép toán so sánh bằng (=).
- Không hỗ trợ các truy vấn phạm vi (range queries).
- Thích hợp cho các bảng nhỏ hoặc các bảng thường xuyên truy cập bằng khóa chính xác.
- Sử dụng:
CREATE TABLE employees ( id INT AUTO_INCREMENT, name VARCHAR(100), email VARCHAR(100), PRIMARY KEY (id), INDEX name_index (name) USING HASH ) ENGINE=Memory;
3. RTREE Index
- Mô tả: RTREE là loại chỉ mục đặc biệt được sử dụng cho dữ liệu không gian (spatial data) trong các bảng MyISAM. RTREE (R-Tree) là cấu trúc cây được thiết kế để hỗ trợ các truy vấn không gian.
- Đặc điểm:
- Tối ưu cho các phép toán không gian như giao nhau (intersect), chứa (contains), và lân cận (proximity).
- Thích hợp cho các cột kiểu không gian như GEOMETRY, POINT, LINESTRING, và POLYGON.
- Sử dụng:
CREATE TABLE locations ( id INT AUTO_INCREMENT, name VARCHAR(100), location GEOMETRY NOT NULL, PRIMARY KEY (id), SPATIAL INDEX(location) ) ENGINE=MyISAM;
4. FULLTEXT Index
- Mô tả: FULLTEXT index được sử dụng để tìm kiếm văn bản toàn văn (full-text search) trong các cột văn bản như CHAR, VARCHAR, hoặc TEXT. Chỉ có sẵn trong các bảng sử dụng các công cụ lưu trữ như InnoDB và MyISAM.
- Đặc điểm:
- Tối ưu cho việc tìm kiếm văn bản.
- Hỗ trợ các chức năng như MATCH và AGAINST để tìm kiếm văn bản.
- Tìm kiếm dựa trên các từ và cụm từ trong văn bản.
- Sử dụng:
CREATE TABLE articles ( id INT AUTO_INCREMENT, title VARCHAR(200), body TEXT, PRIMARY KEY (id), FULLTEXT (title, body) ) ENGINE=InnoDB; -- Tìm kiếm văn bản SELECT * FROM articles WHERE MATCH (title, body) AGAINST ('search term');
Tóm tắt
- BTREE: Loại chỉ mục mặc định, hiệu quả cho các phép toán tìm kiếm, sắp xếp và phạm vi.
- HASH: Chỉ mục băm, tối ưu cho các phép toán so sánh bằng, không hỗ trợ truy vấn phạm vi.
- RTREE: Chỉ mục không gian, tối ưu cho các truy vấn không gian, chỉ có trong MyISAM.
- FULLTEXT: Chỉ mục tìm kiếm văn bản toàn văn, tối ưu cho việc tìm kiếm văn bản, có trong InnoDB và MyISAM.
Việc chọn loại chỉ mục phù hợp phụ thuộc vào loại dữ liệu và kiểu truy vấn mà bạn cần tối ưu hóa trong ứng dụng của mình.
Bình luận (0)