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

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 đó.
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.
SELECT order_id, value, order_date<br /> FROM orders<br /> WHERE order_date + INTERVAL 7 day < NOW()Hãy:
SELECT order_id, value, order_date<br /> FROM orders<br /> WHERE order_date < NOW() - INTERVAL 7 DAY

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.
- Đọc thêm các bài viết chia sẻ kiến thức về phân tích dữ liệu: https://datapot.vn/blog/
- Chuỗi Video Hướng dẫn thực hành Lab và sử dụng các tài nguyên của Microsoft: https://www.youtube.com/c/Datapotvn/videos
- Update tài nguyên từ Microsoft, SQL/DA-100 exam questions và exam topics tại Fanpage của Datapot: https://www.facebook.com/DatapotAnalytics/