Top 7 “bí kíp” tăng hiệu suất câu lệnh trong lập trình SQL

11:09 20/10/2023

SQL là một trong những ngôn ngữ truy vấn có cấu trúc phổ biến nhất trên thế giới, được sử dụng để quản lý cơ sở dữ liệu và truy xuất dữ liệu từ các hệ thống khác nhau. Với SQL, người dùng có thể tương tác với cơ sở dữ liệu một cách dễ dàng và nhanh chóng, từ đó giúp cho việc quản lý và xử lý dữ liệu trở nên hiệu quả hơn.

Ngoài việc nắm rõ các câu lệnh SQL thì việc tối ưu câu lệnh để giảm thời gian thực hiện và tăng hiệu suất là rất quan trọng, nếu như bạn muốn thao tác với những cơ sở dữ liệu lớn và phức tạp. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về việc tăng hiệu suất trong SQL thông qua những ví dụ của nó. Bài viết này sẽ sử dụng PostgreSql để minh hoạ.

Hướng dẫn cách tối ưu hóa câu lệnh SQL

1. Chỉ định tên các trường thay vì sử dụng “ * ”

Việc sử dụng * sẽ in ra toàn bộ các cột có trong bảng, bao gồm cả những cột không cần thiết, việc chọn các cột được chỉ định trước sẽ làm giảm thời gian thực thi và truy vấn nhanh hơn. 

2. Sử dụng Exists để kiểm tra sự tồn tại của bản khi thay cho Count

Bạn đều có thể sử dụng cả Count và Exist để kiểm tra sự tồn tại của bản ghi nhưng nên sử dụng Exist vì hàm Exist thì sẽ dừng lại khi tìm được bản ghi, còn Count sẽ quét toàn bộ.

Ví dụ: select ‘Yes’ where exists (select count(*) from products where price < 500)

3. Hạn chế sử dụng “%” hay “_” và like 

Việc sử dụng “%” hay “_” có thể làm giảm tốc độ truy vấn thay vào đó bạn hãy sử dụng “>” “<” “=”

  • Thay vì sử dụng: select * from products where department like ‘M%’;
  • Bạn nên dùng: select * from products where department >= ‘M’ and department < ‘N’;

4. Sử dụng Join thay cho SubQuery

Việc sử dụng Join khi kết hợp nhiều bảng với nhau sẽ làm giảm thời gian truy vấn so với SubQuery vì SubQuery phụ thuộc vào việc truy vấn không độc lập bên ngoài.

5. Dùng Union thay cho or hoặc in

Khi bạn cần kết hợp hai hoặc nhiều điều kiện, bạn nên loại bỏ việc sử dụng toán tử or hoặc chia truy vấn thành các phần tách biệt các biểu thức tìm kiếm. Hệ quản trị CSDL không thể xử lý or trong một thao tác mà sẽ đánh giá từng thành phần của or nên dẫn đến hiệu suất kém hơn. 

Thay vì sử dụng: select * from products where weight > 10 or price < 500;

Bạn nên dùng:

select * from products where weight > 10
union
select * from products where price < 500;

6. Tránh việc kết hợp quá nhiều bảng không cần thiết khi dùng join

Khi bạn thêm nhiều bảng vào một truy vấn và kết hợp lại với nhau làm máy chủ bị quá tải. Ngoài ra, có quá nhiều bảng để truy xuất dữ liệu dẫn đến kế hoạch thực hiện không hiệu quả. Khi tạo một kế hoạch, trình tối ưu hóa truy vấn SQL cần xác định cách các bảng được nối theo thứ tự nào cũng như cách thức và thời điểm áp dụng các bộ lọc và tổng hợp.

Bạn có thể chia một truy vấn thành nhiều truy vấn riêng biệt mà sau này có thể được nối lại và loại bỏ các phép nối, truy vấn phụ không cần thiết.

7. Sử dụng index

Sử dụng index (hay chỉ mục) là một cấu trúc dữ liệu giúp tăng tốc các truy vấn select và các mệnh đề điều kiện where, order, group. Tuy nhiên, nó sẽ làm chậm quá trình nhập dữ liệu, khi sử dụng các câu lệnh update và insert.

Tạo index: create index on users (first_name);

Viết câu lệnh để xem kích thước của bảng:  select pg_size_pretty(pg_relation_size(‘users’));

Kích thước thu được: 

Và khi sử dụng index: select pg_size_pretty(pg_relation_size(‘users_first_name_idx’));

Có thể nhận thấy việc sử dụng chỉ mục hiệu quả hơn cũng như tăng tốc độ truy vấn, nhất là khi condition rơi vào các cột được đánh chỉ mục. Điều này phù hợp khi sử dụng được cho việc nhóm, sắp xếp dữ liệu và thích hợp với các bảng có số bản ghi lớn. Nhưng nó cũng tồn tại 1 số nhược điểm như làm chậm quá trình nhập dữ liệu update, insert dẫn đến không thích hợp sử dụng khi hoạt động update, insert xảy ra thường xuyên với số lượng lớn.

Vì vậy, không nên sử dụng trên cột chứa nhiều giá trị Null. Ngoài ra, nó cũng chiếm dụng bộ nhớ tài nguyên của hệ thống. PostgreSQL cung cấp một số loại Index như: B-tree, Hash, GiST, SP-GiST và Gin. Mỗi loại index sử dụng một thuật toán khác nhau phù hợp nhất với các loại truy vấn khác nhau. Theo mặc định, lệnh Create index tạo các index B-tree.

Hy vọng với những thông tin trên sẽ giúp bạn tối ưu hóa hiệu suất câu lệnh SQL và tiết kiệm thời gian khi lập trình. Chúc các bạn thành công!

Bộ môn Công nghệ thông tin
Trường Cao đẳng FPT Polytechnic cơ sở Hà Nội

Hỗ trợ tư vấn và giải đáp thông tin tuyển sinh FPT Polytechnic

Cùng chuyên mục

Đăng ký nhập học tại FPT Polytechnic 2026

  • Max. file size: 50 MB.
  • Max. file size: 50 MB.
  • Max. file size: 50 MB.