Truy vấn SQL

Tối ưu truy vấn SQL để không trở thành “kẻ hủy diệt server”

Ngày đăng: 17/03/2022

Bạn là một newbie trong ngành dữ liệu? Bạn mới đi làm và tiếp xúc với dữ liệu thật của doanh nghiệp? Bạn mới đặt những bước chân đầu tiên trên con đường mang SQL ra “chinh chiến” với những bộ dữ liệu lớn? Đừng bỏ lỡ bài viết hướng dẫn tối ưu truy vấn SQL này của Datapot để không trở thành “kẻ hủy diệt Server”.

Bạn biết đấy, khi đi làm, chúng ta sử dụng chung một môi trường, do đó bất kỳ hoạt động nào của bạn ít nhiều đều có ảnh hưởng đến toàn bộ hệ thống. Rất nhiều trường hợp trong quá trình làm việc, viết truy vấn chưa tối ưu dẫn đến treo cả server dùng chung của cả team. Khi dữ liệu nhỏ, việc thực thi truy vấn gần như là tức thì, nhưng khi dữ liệu đủ lớn thì tốc độ thực hiện trở thành một trở ngại đối với dự án. Một truy vấn không hiệu quả sẽ tiêu hao tài nguyên của cơ sở dữ liệu và gây ra hiệu suất chậm hoặc mất dịch vụ cho những người dùng khác nếu truy vấn có lỗi. Vì vậy, hãy nhớ nhé, tối ưu truy vấn SQL là một key mà bất cứ ai làm việc với dữ liệu đều phải “khắc cốt ghi tâm”. Và dưới đây sẽ là một số tips nhỏ các bạn có thể lưu ý để có một câu truy vấn tối ưu và “xinh đẹp” hơn nhé!

1. Hãy chỉ lấy ra những trường dữ liệu cần thiết – Truy vấn SQL

Điều này cực kỳ đơn giản, nhưng cũng nhiều người “hơi lười một chút” hoặc cứ quen tay cho một câu “SELECT * FROM”

Việc này với một database (DB) nhỏ thì không phải là một vấn đề lớn nhưng với một DB lớn, một records có nhiều trường phức tạp thì việc lấy ra hết các trường sẽ làm câu truy vấn SQL chạy chậm một cách đáng kể và việc này khá là tai hại, vì thế chúng ta nên tập thói quen ngay từ đầu là chỉ nên lấy ra những dữ liệu mà mình cần.

Thay vì:

SELECT * FROM customers;

Hãy:

SELECT id, name, address FROM customers

Truy vấn SQL 1

2. Hạn chế sử dụng mệnh đề DISTINCT

Khi truy vấn SQL và gặp trường hợp các bản ghi bị duplicate, bạn sẽ làm gì? DISTINCT có lẽ là một giải pháp nhanh gọn lẹ, tuy nhiên việc sử dụng mệnh đề này trong câu truy vấn sẽ làm chậm quá trình truy vấn dữ liệu rất nhiều. Vì vậy hãy hạn chế tối đa việc sử dụng DISTINCT, một giải pháp khác các bạn có thể nghĩ đến như sử dụng GROUP BY chẳng hạn.

Lưu ý này sẽ kéo theo một điều là khi bạn biết các records không bị trùng lặp, bạn nên sử dụng UNION ALL thay cho UNION vì ngầm định việc sử dụng UNION sẽ được thực hiện tương đương với câu lệnh SELECT DISTINCT đó.

Truy vấn SQL 2

3. Học cách sử dụng INDEX một cách hợp lý

INDEX – chỉ mục – hiểu đơn giản là một con trỏ chỉ tới từng giá trị xuất hiện trong trường được đánh chỉ mục. Chỉ mục trong Database có ý nghĩa tương tự như các mục trong xuất hiện trong Mục lục của một cuốn sách. Index sẽ giúp bạn thực thi truy vấn SQL một cách hiệu quả hơn. Tuy nhiên, cần phải sử dụng index đúng cách bởi vì việc sử dụng index sẽ làm cho các câu lệnh thay đổi dữ liệu như INSERT, UPDATE và DELETE chậm hơn.

Việc sử dụng các loại index khác nhau khá phức tạp, tuy nhiên có một số nội dung các bạn có thể ứng dụng được:

  • Ưu tiên các điều kiện lọc sử dụng với các trường có Index
  • Hạn chế tính toán với các trường có Index.

Cùng xem xét 1 ví dụ với My SQL nhé: Chẳng hạn, bạn cần lấy ra thông tin những đơn hàng được tạo trong 7 ngày gần đây, biết rằng trường ngày tạo đơn (order_date) được đánh index:

Thay vì:

SELECT order_id, value, order_date<br />
FROM orders<br />
WHERE order_date + INTERVAL 7 day &lt; NOW()

Hãy:

SELECT order_id, value, order_date<br />
FROM orders<br />
WHERE order_date &lt; NOW() - INTERVAL 7 DAY

Truy vấn SQL 3

4. Sử dụng LIMIT để lấy mẫu của kết quả truy vấn

Khi cho câu truy vấn chạy lần đầu tiên, hãy đảm bảo kết quả trả ra đúng như mong muốn và có ý nghĩa bằng cách sử dụng câu lệnh LIMIT. (Trong một số hệ thống quản trị cơ sở dữ liệu, TOP được sử dụng thay thế cho LIMIT). Câu lệnh LIMIT chỉ trả về số lượng bản ghi được chỉ định. Việc sử dụng câu lệnh LIMIT ngăn chặn việc cơ sở dữ liệu phải trả ra một truy vấn lớn.

SQL Query 4

Mỗi hệ quản trị cơ sở dữ liệu sẽ tồn tại một số khác biệt nhất định về cú pháp hay cơ chế hoạt động, những chia sẻ trên đây là một số tips cơ bản và tổng quan nhất để tối ưu câu truy vấn SQL mà các bạn có thể tham khảo nhé!

Tham khảo các khóa học về SQL tại Datapot tại đây.

-8%
Beginner
7.200.000 7.800.000 
-17%
Beginner
8.100.000 8.800.000 
-6%
Fresher, Junior
6.190.000 
-8%
Beginner
2.400.000 
-13%
Intermediate
4.200.000 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *