Tuning Là Gì

Performance Tuning SQL (cải thiện hiệu suất truy vấn SQL) là một nhiệm vụ quan trọng và không bao giờ có điểm dừng. Trong bài viết này, chúng ta sẽ tìm hiểu về Performance Tuning SQL và đưa ra một số giải pháp để cải thiện hiệu suất truy vấn SQL trên máy chủ của bạn.

Performance Tuning SQL là gì?

Để máy chủ hoạt động với hiệu suất cao, bạn cần cải thiện hiệu suất truy vấn SQL. Quá trình này được gọi là Performance Tuning SQL. Mục tiêu chung là giảm tài nguyên được sử dụng để xử lý truy vấn và giúp người dùng nhận được kết quả trong thời gian ngắn nhất sau khi thực hiện truy vấn.

Để xác định khi nào truy vấn của bạn cần cải thiện và làm thế nào để cải thiện chúng, dưới đây là một số thông tin hữu ích:

Thời gian chạy truy vấn

Cơ sở dữ liệu, giống như các phần mềm khác, có những hạn chế về khả năng xử lý thông tin. Một trong những hạn chế đó là cơ sở dữ liệu chỉ xử lý được lượng thông tin mà phần cứng của nó có thể xử lý.

Nếu bạn muốn truy vấn chạy nhanh hơn, bạn cần giảm số lượng phép tính mà cơ sở dữ liệu phải thực hiện. Để làm điều này, hãy tìm hiểu về các yếu tố ảnh hưởng đến số lượng phép tính và thời gian chạy truy vấn, bao gồm:

  • Kích thước bảng: Truy vấn sẽ mất nhiều thời gian hơn nếu truy vấn của bạn truy cập vào các bảng có hàng triệu dòng.
  • Joins (Kết hợp): Truy vấn sẽ chậm khi truy vấn kết hợp hai bảng vì số lượng dòng tăng lên đáng kể.
  • Tổng hợp: Hiệu suất truy vấn sẽ nhanh khi chỉ truy xuất các dòng, ngược lại, nếu kết hợp nhiều dòng để tạo ra một kết quả, thời gian tính toán sẽ lâu hơn.

Ngoài các yếu tố trên, một số yếu tố liên quan đến cơ sở dữ liệu mà bạn không kiểm soát cũng ảnh hưởng đến thời gian chạy truy vấn, bao gồm:

  • Người dùng khác đang chạy truy vấn: Cơ sở dữ liệu sẽ chạy chậm hơn và tốn nhiều tài nguyên khi có nhiều truy vấn đang được thực hiện cùng một lúc.
  • Phần mềm và tối ưu hóa cơ sở dữ liệu: Bạn không thể kiểm soát điều này, tuy nhiên truy vấn của bạn vẫn chạy nhanh nếu bạn làm việc trong giới hạn cho phép.

Hướng dẫn cải thiện hiệu suất truy vấn SQL

Để cải thiện hiệu suất truy vấn SQL, hãy tìm cách điều chỉnh công việc của bạn. Dưới đây là một số kinh nghiệm chúng tôi đã áp dụng thành công và mang lại hiệu quả cao mà bạn nên thử:

Giảm kích thước bảng

Tốc độ truy vấn sẽ được cải thiện đáng kể khi bạn lọc dữ liệu để chỉ bao gồm các quan sát mà bạn cần. Tùy thuộc vào vấn đề bạn đang giải quyết, có nhiều cách thực hiện tinh chỉnh phù hợp.

Ví dụ, khi làm việc với dữ liệu chuỗi thời gian, giới hạn truy vấn trong một khoảng thời gian ngắn sẽ làm cho truy vấn chạy nhanh hơn.

SELECT * FROM table_name WHERE time_column >= start_time AND time_column <= end_time;

Bạn cũng có thể tinh chỉnh công việc của mình để tạo một truy vấn con trên một tập hợp con dữ liệu. Sau khi hoàn thành, hãy loại bỏ giới hạn và tiến hành chạy công việc trên toàn bộ dữ liệu. Mặc dù thời gian để chạy truy vấn cuối cùng sẽ hơi lâu, nhưng các bước trung gian diễn ra nhanh chóng.

Đó cũng chính là lý do tại sao lệnh LIMIT thường được sử dụng trong SQL. Thông thường, mặc định sẽ là LIMIT – 100 hàng đầu tiên của truy vấn vì tập hợp dữ liệu này đủ nhỏ để kết quả trả về nhanh chóng.

Tuy nhiên, LIMIT – 100 sẽ không tăng tốc độ truy vấn nếu bạn tổng hợp thành một hàng như ví dụ sau:

SELECT * FROM table_name WHERE condition LIMIT 100;

Giới hạn trong truy vấn con sẽ giúp truy vấn chạy nhanh hơn, tuy nhiên, để có kết quả tốt, cần thực hiện nhiều hơn.

Giảm độ phức tạp khi kết hợp các bảng

Ngoài việc giảm kích thước bảng, bạn nên giảm số lượng dữ liệu trong truy vấn trước khi kết hợp các bảng với nhau. Điều này cũng giúp cải thiện hiệu suất truy vấn đáng kể. Ví dụ, kết hợp thông tin về các đội thể thao của đại học với danh sách cầu thủ của các trường cao đẳng trong ví dụ dưới đây sẽ giúp bạn hiểu rõ hơn:

SELECT * FROM university_teams JOIN college_players ON university_teams.team_id = college_players.team_id;

Trong bảng college_players, có 26.298 hàng cần được đánh giá. Tuy nhiên, bạn có thể giảm số hàng này nếu đã tổng hợp các bảng trước đó.

SELECT * FROM (SELECT * FROM university_teams JOIN college_players ON university_teams.team_id = college_players.team_id) AS sub_query;

Kết quả truy vấn trên trả về 252 hàng. Nếu bạn muốn giảm chi phí của phép kết hợp, hãy bỏ tổng hợp vào truy vấn con và kết hợp nó trong truy vấn chính.

SELECT * FROM university_teams JOIN (SELECT * FROM college_players WHERE condition) AS sub_query ON university_teams.team_id = sub_query.team_id;

Với 30.000 hàng, cơ sở dữ liệu xử lý khá đơn giản, bạn sẽ khó thấy được sự khác biệt. Tuy nhiên, trong trường hợp có hàng trăm nghìn hàng hoặc hơn, tổng hợp trước sẽ giúp truy vấn chạy nhanh hơn đáng kể.

Sử dụng EXPLAIN

Thêm từ khóa EXPLAIN trước một truy vấn đang hoạt động để xem kế hoạch truy vấn. Mức độ chính xác có thể chưa cao, nhưng đây thực sự là một công cụ có nhiều ưu điểm.

EXPLAIN SELECT * FROM table_name WHERE condition;

Sau khi thực hiện, kế hoạch truy vấn sẽ được hiển thị. Kế hoạch này cho thấy rõ ràng thứ tự mà truy vấn của bạn được thực thi.

Truy vấn đầu tiên đối với mục nhập cuối cùng trong danh sách. So sánh với phần trên, bạn sẽ thấy rằng WHERE condition được thực hiện đầu tiên. Sau đó, cơ sở dữ liệu quét 600 hàng. Bên cạnh số hàng đã liệt kê, chi phí càng cao, số lượng hàng càng nhiều thì thời gian để thực hiện truy vấn càng lâu.

Tổng kết

Trong bài viết này, chúng ta đã tìm hiểu về Performance Tuning SQL và một số giải pháp để cải thiện hiệu suất truy vấn SQL. Bằng cách giảm kích thước bảng, giảm độ phức tạp khi kết hợp các bảng, và sử dụng EXPLAIN, bạn có thể cải thiện hiệu suất truy vấn SQL của mình. Hãy áp dụng những kinh nghiệm này vào công việc của bạn và tận hưởng những kết quả tuyệt vời mà chúng mang lại!