25/09/2018, 08:41

Một vài cách tối ưu hóa truy vấn đơn giản trong SQL

Dù cho hiện tại có rất nhiều hệ quản trị cơ sở dữ liệu NoSQL ra đời với rất nhiều mặt cải tiến nhưng SQL DBs vẫn rất được ưa chuộng và vẫn là loại hệ quản trị cơ sở dữ liệu được sử dụng nhiều nhất. Với một DB đủ lớn nếu truy vấn không được tối ưu tốt thì việc ứng dụng chạy ỳ ạch là khó thể tránh ...

Dù cho hiện tại có rất nhiều hệ quản trị cơ sở dữ liệu NoSQL ra đời với rất nhiều mặt cải tiến nhưng SQL DBs vẫn rất được ưa chuộng và vẫn là loại hệ quản trị cơ sở dữ liệu được sử dụng nhiều nhất. Với một DB đủ lớn nếu truy vấn không được tối ưu tốt thì việc ứng dụng chạy ỳ ạch là khó thể tránh khỏi. Trong bài viết này mình sẽ đưa ra một vài phương pháp đơn giản để tối ưu truy vấn giúp việc thao tác với dữ liệu ở trong DB trở nên nhanh hơn.

Dùng index một cách ĐÚNG ĐẮN sẽ giúp việc thực thi truy vấn nhanh hơn rất nhiều lần. Index giống như một cái mục lục vậy, khi bạn muốn tìm đến một phần hay một chương trong cuốn sách thì chỉ cần nhìn mục lục và số trang rồi lật đến trang đó là xong, thay vì mất công xem tìm từng trang một trong cuốn sách.

Ví dụ với sample database quen thuộc: sakila. Trong db này có một bảng film chứa thông tin về bộ phim, trong đó có trường description chứa miêu tả về bộ phim, bây giờ mình muốn lấy ra những phim có dòng description bắt đầu là "An emotional" thì câu truy vấn sẽ là

select * from film where description like "A emotional%";

Sử dụng câu lệnh explain chúng ta sẽ thấy được mysql cần duyệt qua 1000 dòng để thực thi câu truy vấn này. Mình sẽ thêm index vào film description bằng cách chạy câu lệnh create index idx_film_description on film(description(15)); để xem sự khác biệt sẽ như thế nào. Bây giờ thì mysql chỉ cần phải duyệt 57 dòng để thực thi câu truy vấn trên, nhanh hơn rất nhiều lần phải không nào             </div>
            
            <div class=

0