top of page

05 TIPS TỐI ƯU LỆNH TRUY VẤN SQL CỦA BẠN

Là một lập trình viên, chắc hẳn các bạn không còn xa lạ với các câu lệnh SQL. Các câu lệnh SQL có thể giúp bạn truy xuất dữ liệu từ bất cứ CSDL nào. Tuy nhiên, trong quá trình truy xuất dữ liệu có thể bạn đã gặp trường hợp những lệnh truy vấn rất chậm. Do vậy chúng ta cần biết cách để tối ưu câu lệnh SQL nhanh hơn, mang lại hiệu suất làm việc cao hơn.


Ở bài viết này, Thầy Sơn BI sẽ trình bày một số mẹo giúp tối ưu truy vấn SQL của bạn!


Tối ưu câu lệnh SQL giúp việc truy xuất dữ liệu nhanh hơn


05 chú ý để Truy Vấn SQL chạy nhanh hơn

Tối ưu truy vấn là một kĩ năng quan trọng đối với các Data Analyst - người khai thác dữ liệu từ CSDL với tần suất cao. Để nâng cao hiệu suất truy vấn, các lập trình viên cần hiểu được công cụ tối ưu hóa truy vấn, cách công cụ này chọn một lối truy cập và chuẩn bị kế hoạch tiến hành truy vấn.


Tip 1 – Học cách sử dụng Index hợp lý


  • Index (chỉ mục) là yếu tố quan trọng nhất góp phần nâng cao hiệu suất của CSDL. Ví dụ đơn giản: Khi đọc một cuốn sách, bạn sẽ dễ dàng nhanh chóng tìm đến một trang bất kì mà bạn muốn đọc thông qua phần mục lục. Thì tương tự, Index trong SQL cũng vậy. Index giúp tăng tốc độ truy vấn dữ liệu trong SQL bằng cách sử dụng phương pháp truy xuất nhanh chóng tới các dòng các bảng.

  • Chỉ nên đánh Index ở các cột dùng trong lệnh Where, Order By, Group By

  • Không nên dùng Index nếu dữ liệu của bạn thường xuyên bị thay đổi, các bảng nhỏ hoặc ít bản ghi.

  • Bên cạnh việc sử dụng Index để nâng cao hiệu suất của Database thì việc "lạm dụng" Index sẽ gây ra một số "tác dụng phụ" như: Làm giảm hiệu năng của lệnh Insert, Update, Delete.


Tip 2 – Chỉ lấy ra những dữ liệu cần thiết


  • Như các bạn đã biết, sử dụng Select * là cách phổ biến để truy xuất các trường (cột) mong muốn. Tuy nhiên đó cũng chính là lỗi sai điển hình mà các bạn thường mắc phải. Vì không phải tất cả các trường (cột) các bạn đều cần thông tin của chúng.

  • Với bảng nhỏ, việc truy xuất cùng một lúc sẽ không gây ảnh hưởng gì khác biệt. Tuy nhiên đối với các tập dữ liệu lớn lại ngược lại. Việc chỉ định các trường (cột) bạn muốn truy xuất dữ liệu sẽ giúp giảm lượng lớn thời gian truy vấn.

Ví dụ: Nếu bạn chỉ cần lấy những thông tin: Họ tên, ngày sinh, giới tính... của các User thì:
- Thay vì sử dụng SELECT * FROM USER ... 
- Hãy sử dụng: SELECT NAME, DATE OF BRITH, GENDER FROM USER ...


Tip 3 – Sử dụng khóa LIKE hợp lý


Không sử dụng ký tự đại diện: %, * đặt trước giá trị tìm kiếm khi dùng LIKE vì việc đó sẽ ngăn Database dử dụng Index (nếu có) của cột Name, làm giảm tốc độ truy vấn rất nhiều.

Ví dụ:
Trên bảng students, nếu bạn truy xuất như này: 

select * from students where first_name like '%nam';

sẽ khiến SQL thực hiện quét toàn bộ bảng ngay cả khi bạn đã đánh Index trường ‘first_name’ trên bảng students.


Tip 4 – Tối ưu hóa câu lệnh bằng Union


Trong quá trình truy xuất dữ liệu, chúng ta cần làm việc với các câu truy vấn so sánh "or". Khi từ khóa or được sử dụng quá nhiều, dẫn đến việc có thể MySQL sẽ phải tìm toàn bộ bảng để kiếm bản ghi. Bởi vậy Union sẽ giúp câu truy vấn nhanh hơn, đặc biệt nếu bạn đánh chỉ mục - Index một cách hợp lý.

Ví dụ:
select from students where first_name like  'L%'  or last_name like 'n%';

Câu truy vấn trên có thể được tối ưu hơn bằng cách sử dụng toán tử Union để tận dụng index đã đánh.

select from students where first_name like 'L%' 
union all 
select from students where last_name like 'n%';


Tip 5 – Sử dụng Stored Procedure thay cho các truy vấn phức tạp


Cuối cùng, để tối ưu truy vấn SQL, bạn nên sử dụng Stored Procedure thay cho những câu truy vấn phức tạp. Vì Stored Procedure thực thi mã nhanh hơn và giảm tải băng thông.

  • Thực thi nhanh hơn: Stored Procedure khi được tạo ra sẽ được biên dịch và lưu vào bộ nhớ. Điều đó đồng nghĩa với việc bạn sẽ thực thi nhanh hơn so với việc gửi từng đoạn lệnh SQL, hạn chế thời gian SQL phải biên dịch lại nhiều lần.

  • Giảm tải băng thông: Khi gửi nhiều câu lệnh SQL thông qua network đến database cũng sẽ ảnh hưởng tới hiệu suất đường truyền. Thay vì phải gửi nhiều lần, bạn có thể gom các câu lệnh SQL vào chung 1 Stored Procedure & chỉ gửi đúng 1 lần thông qua network.

  • Ngoài ra, viết Stored Procedure sẽ thuận tiện cho việc phân quyền & bảo mật tốt hơn.


Kết luận


Trên đây là 05 tip giúp tối ưu truy vấn SQL của bạn, hi vọng qua bài viết này, các bạn sẽ "sở hữu" thêm cho mình một vài cách đơn giản để tối ưu hóa câu lệnh truy vấn trong SQL. Hoặc bạn có thể tìm hiểu sâu hơn trong các khóa học về Business Intelligence. Cám ơn các bạn đã quan tâm theo dõi. Hẹn gặp lại ở những bài chi sẻ tiếp theo!

1.547 lượt xem0 bình luận

Danh Mục

bottom of page