SlideShare a Scribd company logo
1 of 24
Download to read offline
Hệ quản trị CSDL
BÀI 3: MYSQL INDEXES
TS. Lê Hoàng Quỳnh
Trường Đại học Công nghệ - Đại học Quốc Gia Hà Nội
lhquynh@vnu.edu.vn
Chỉ mục (index)
HQT CSDL 2
SELECT * FROM foo WHERE item = ‘Dolor’;
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
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
Đá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
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
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
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
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
Không sử dụng index
• SELECT * from rental WHERE
year(rental_date)=2006
HQT CSDL 10
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
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
Qúa trình thi hành truy vấn
HQT CSDL 13
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
Ví dụ
HQT CSDL 15
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
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
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
Tìm kiếm trong B-trees
• k=17
HQT CSDL 19
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
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
Index theo storage Engine
HQT CSDL 22
Chỉ mục danh sách đảo ngược
HQT CSDL 23
Tài liệu tham khảo
• https://dev.mysql.com/doc/refman/8.0/en/t
utorial.html
24
HQT CSDL

More Related Content

Similar to 03-Indexes.pdf

Sinh vienit.net --sinhvienit.net-giao-trinh-oracle-sql-plsql-co-ban
Sinh vienit.net --sinhvienit.net-giao-trinh-oracle-sql-plsql-co-banSinh vienit.net --sinhvienit.net-giao-trinh-oracle-sql-plsql-co-ban
Sinh vienit.net --sinhvienit.net-giao-trinh-oracle-sql-plsql-co-banSon Nguyen Ba
 
Giao-Trinh-Oracle-SQL-PLSQL-Co-Ban.pdf
Giao-Trinh-Oracle-SQL-PLSQL-Co-Ban.pdfGiao-Trinh-Oracle-SQL-PLSQL-Co-Ban.pdf
Giao-Trinh-Oracle-SQL-PLSQL-Co-Ban.pdftuanbnonline
 
Giao trinh he quan tri csdl dành cho asp.net
Giao trinh he quan tri csdl dành cho asp.netGiao trinh he quan tri csdl dành cho asp.net
Giao trinh he quan tri csdl dành cho asp.netlove-dalat
 
THCS_W14_BaiDocThem
THCS_W14_BaiDocThemTHCS_W14_BaiDocThem
THCS_W14_BaiDocThemCNTT-DHQG
 
THCS_W14_Cơ sở dữ liệu trên bảng tính excel
THCS_W14_Cơ sở dữ liệu trên bảng tính excelTHCS_W14_Cơ sở dữ liệu trên bảng tính excel
THCS_W14_Cơ sở dữ liệu trên bảng tính excelCNTT-DHQG
 
Bài 11 tạo bảng và sử dụng các kiểu dữ liệu
Bài 11 tạo bảng và sử dụng các kiểu dữ liệuBài 11 tạo bảng và sử dụng các kiểu dữ liệu
Bài 11 tạo bảng và sử dụng các kiểu dữ liệuzzsunzz
 
05 acc201 bai 3_v1.0011103225
05 acc201 bai 3_v1.001110322505 acc201 bai 3_v1.0011103225
05 acc201 bai 3_v1.0011103225Yen Dang
 

Similar to 03-Indexes.pdf (10)

9. partitioning
9. partitioning9. partitioning
9. partitioning
 
Sinh vienit.net --sinhvienit.net-giao-trinh-oracle-sql-plsql-co-ban
Sinh vienit.net --sinhvienit.net-giao-trinh-oracle-sql-plsql-co-banSinh vienit.net --sinhvienit.net-giao-trinh-oracle-sql-plsql-co-ban
Sinh vienit.net --sinhvienit.net-giao-trinh-oracle-sql-plsql-co-ban
 
Giao-Trinh-Oracle-SQL-PLSQL-Co-Ban.pdf
Giao-Trinh-Oracle-SQL-PLSQL-Co-Ban.pdfGiao-Trinh-Oracle-SQL-PLSQL-Co-Ban.pdf
Giao-Trinh-Oracle-SQL-PLSQL-Co-Ban.pdf
 
Giao trinh he quan tri csdl dành cho asp.net
Giao trinh he quan tri csdl dành cho asp.netGiao trinh he quan tri csdl dành cho asp.net
Giao trinh he quan tri csdl dành cho asp.net
 
THCS_W14_BaiDocThem
THCS_W14_BaiDocThemTHCS_W14_BaiDocThem
THCS_W14_BaiDocThem
 
THCS_W14_Cơ sở dữ liệu trên bảng tính excel
THCS_W14_Cơ sở dữ liệu trên bảng tính excelTHCS_W14_Cơ sở dữ liệu trên bảng tính excel
THCS_W14_Cơ sở dữ liệu trên bảng tính excel
 
2 co ban ve sql
2 co ban ve sql2 co ban ve sql
2 co ban ve sql
 
04 ado
04 ado04 ado
04 ado
 
Bài 11 tạo bảng và sử dụng các kiểu dữ liệu
Bài 11 tạo bảng và sử dụng các kiểu dữ liệuBài 11 tạo bảng và sử dụng các kiểu dữ liệu
Bài 11 tạo bảng và sử dụng các kiểu dữ liệu
 
05 acc201 bai 3_v1.0011103225
05 acc201 bai 3_v1.001110322505 acc201 bai 3_v1.0011103225
05 acc201 bai 3_v1.0011103225
 

03-Indexes.pdf

  • 1. Hệ quản trị CSDL BÀI 3: MYSQL INDEXES TS. Lê Hoàng Quỳnh Trường Đại học Công nghệ - Đại học Quốc Gia Hà Nội lhquynh@vnu.edu.vn
  • 2. Chỉ mục (index) HQT CSDL 2 SELECT * FROM foo WHERE item = ‘Dolor’;
  • 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
  • 13. Qúa trình thi hành truy vấn HQT CSDL 13
  • 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
  • 19. Tìm kiếm trong B-trees • k=17 HQT CSDL 19
  • 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
  • 22. Index theo storage Engine HQT CSDL 22
  • 23. Chỉ mục danh sách đảo ngược HQT CSDL 23
  • 24. Tài liệu tham khảo • https://dev.mysql.com/doc/refman/8.0/en/t utorial.html 24 HQT CSDL