3. Vai trò của chỉ mục
• Tìm bản ghi thỏa mãn điều kiện trong câu lênh
“WHERE”
• Nếu có nhiều kiểu chỉ mục, MySQL lựa chọn
kiểu chỉ mục cho phép tìm số lượng bản ghi ít
nhất
• Nếu bảng có nhiều cột chỉ mục, vd (col1, col2,
col3) thì việc tìm kiếm sẽ dựa vào các chỉ mục
(col1), (col1, col2), (col1, col2, col3)
• Lấy các bản ghi của bảng khác khi thực thi phép
nối
HQT CSDL 3
4. Vai trò của chỉ mục
• Tìm giá trị MIN(), MAX() cho một cột
được đánh chỉ mục
SELECT MIN(key_part2),MAX(key_part2)
FROM tbl_name
WHERE key_part1=10;
• Sắp xếp hoặc nhóm một bảng
HQT CSDL 4
5. Đánh chỉ mục
theo nhiều trường
• Có thể đánh chỉ mục theo một hoặc nhiều trường
– Chỉ mục chỉ hiệu quả khi tìm kiếm theo đúng thứ tự các trường
được khai báo
HQT CSDL 5
6. Tối ưu chỉ mục
• MySQL có thể sử dụng chỉ mục trên các
cột hiệu quả hơn nếu được khai báo cùng
kiểu và cùng cỡ khi so sánh
• Ví dụ
– VARCHAR(10) và CHAR(10) cùng kích thước
– VARCHAR(10) và CHAR(15) không cùng kích
thước
HQT CSDL 6
7. Nên đánh chỉ mục khi
• Đánh chỉ mục các cột xuất hiện trong điều
kiện tìm kiếm
• Đánh chỉ mục các cột xuất hiện trong điều
kiện nối. MySQL tự động tạo các chỉ mục
khi định nghĩa các khóa chính và các khóa
ngoài
HQT CSDL 7
8. Không nên đánh chỉ mục khi
• Không nên đánh chỉ mục các cột chỉ xuất
hiện trong mục SELECT
• Không nên đánh chỉ mục các cột có miền
nhỏ. Thực tế khi MySQL thấy một giá trị
xuất hiện trong ít hơn 30% các dòng của
bảng, MySQL sẽ không sử dụng chỉ mục
• Chỉ tạo các chỉ mục nếu cần
HQT CSDL 8
9. Nhược điểm của đánh chỉ mục
• Ghi dữ liệu chậm hơn
• Tốc độ xử lý tỉ lệ thuận với số lượng chỉ
mục
• Tốn dung lượng lưu trữ
HQT CSDL 9
10. Không sử dụng index
• SELECT * from rental WHERE
year(rental_date)=2006
HQT CSDL 10
11. Sử dụng Index
• SELECT * FROM tbl_name WHERE
key_col LIKE 'Patrick%’
• SELECT * FROM tbl_name WHERE
key_col LIKE 'Pat%_ck%';
HQT CSDL 11
12. Cú pháp
SHOW INDEX FROM table_name
CREATE UNIQUE INDEX index_name ON table_name
( column1, column2,...);
ALTER TABLE tbl_name ADD PRIMARY KEY
(column_list)
ALTER TABLE tbl_name ADD UNIQUE index_name
(column_list)
ALTER TABLE tbl_name ADD INDEX index_name
(column_list
ALTER TABLE tbl_name ADD FULLTEXT
index_name (column_list)
ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
HQT CSDL 12
14. Kế hoạch thi hành truy vấn
• Phụ thuộc vào các chi tiết của các bảng,
các cột, chỉ mục và các điều kiện trong
mệnh đề WHERE, bộ tối ưu của MySQL sẽ
xem xét nhiều kỹ thuật để thực thi truy vấn
hiệu quả
• Câu lệnh EXPLAIN có thể sử dụng để lấy
thông tin về cách MySQL thi hành một câu
lệnh SELECT
HQT CSDL 14
16. Các kiểu chỉ mục trong MySQL
• Primary key, Unique key, Index, Fulltext
• Chỉ mục dữ liệu không gian (Spatial index)
sử dụng R-trees
• Bảng Memory sử dụng chỉ mục Hash
• InnoDB sử dụng danh sách đảo ngược
cho chỉ mục Fulltext
HQT CSDL 16
17. B-trees
• Cấu trúc dữ liệu dạng cây cân bằng, lưu dữ liệu được sắp
xếp
• Cho phép tìm kiếm, truy cập tuần tự, chèn, xóa với độ
phức tạp của thuật toán O(logn)
• sử dụng hiệu quả với so sánh chính xác hoặc so sánh dựa
trên khoảng (<, <=, =, >=, >, <>, !=, và BETWEEN). B-tree
indexes có thể sử dụng cho tìm kiếm theo mẫu (LIKE) nếu
mẫu bắt đầu bằng chữ cái thay vì kí tự wildcard
HQT CSDL
17
18. Thuộc tính của B-trees
• Tất cả lá ở cùng cấp.
• Một B-Tree được xác định bằng bậc (order) m.
• Mọi node (bao gồm cả gốc) có thể chứa tối đa m-1 keys.
• Mọi node trừ root phải chứa tối thiểu (m/2)-1 keys. Gốc có thể chứa tối thiểu 1 node.
• Số con của một node (không phải lá) bằng số keys trong đó cộng với 1 và tối thiểu là m/2, tối
đa là m.
• Tất cả các keys của một node được sắp xếp theo thứ tự tang dần. Con giữa hai keys k1 và k2
chứa tất cả các keys nằm trong khoảng từ k1 và k2.
HQT CSDL 18
20. Chỉ mục Hash
• Chỉ được sử dụng cho phép so sánh =, hoặc <>
• Hàm băm ánh xạ mỗi giá trị khóa tới một bucket
trong bảng chỉ mục hash
HQT CSDL 20
21. R-trees
• Cấu trúc dữ liệu dạng cây thường dùng trong
tạo chỉ mục dữ liệu không gian, thông tin đa
chiều, ví dụ như toạ độ địa lý.
• Do Antonin Guttman đề xuất năm 1984
• Phương thức truy cập R-tree đánh giá các chỉ
mục (đối tượng dữ liệu và hộp giới hạn) dưới
dạng đối tượng mờ (chuỗi byte).
• Ví dụ các truy vấn:
– Tìm các cửa hàng trà sữa trong bán kính 500 m
HQT CSDL 21