Tối ưu SQL sử dụng Index là một kỹ thuật kinh điển, tuy nhiên không nhiều người hiểu rõ bản chất của Index để có thể áp dụng đúng và chuẩn trong các dự án thực tế. Hãy xem Demo sau của tôi nhé
1. Cùng xem xét câu lệnh SQL sau
select * from EMPLOYEES where last_name like '%D%'
Một số thông tin cơ bản:
- Bảng EMPLOYEES có dung lượng 54MB
- Tổng số bản ghi trong bảng EMPLOYEES là 1.100.006 bản ghi
- Giả sử bảng hiện tại không có bất kỳ Index nào cả
Chiến lược thực thi của câu lệnh SQL thời điểm này như sau
- Câu lệnh buộc phải quét toàn bộ các block trong bảng (TABLE ACCESS FULL)
- Chi phí thực hiện câu lệnh là 2K
2. Demo đánh giá hiệu quả sử dụng Index của Cơ sở dữ liệu
Ta tiến hành tạo Index trên cột LAST_NAME của bảng EMPLOYEES
create index idx_lastname on EMPLOYEES(last_name);
Sau khi tạo Index thành công, kiểm tra lại chiến lược thực thi của câu lệnh SQL.
Kết quả chiến lược thực thi của câu lệnh không hề khác biệt so với ban đầu
Hiện tượng này là do hệ thống không thể sử dụng Index nếu chúng ta tiến hành tìm kiếm với điều kiện LIKE mà có % ở đầu giá trị tìm kiếm.
Câu hỏi đặt ra ở đây là: Nếu như trong câu lệnh SQL trên, ta tìm kiếm giá trị mà không bắt đầu bằng dấu ‘%’ thì hệ thống có luôn sử dụng Index hay không?
- Câu trả lời là nếu chuyển từ khóa tìm kiếm thành ‘D%’ thì cũng chưa chắc câu lệnh nhận Index!!!
Tại sao lại như vậy?
Anh em có thể Video Demo nhé
3. Video Demo

Views: 715