Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

5 Nguyên tắc truy vấn và cú pháp SQL để giám sát cơ sở dữ liệu tốt hơn

Việc áp dụng cú pháp SQL tốt và thực hành viết truy vấn sẽ cải thiện hiệu quả giám sát cơ sở dữ liệu của bạn và kết quả là cải thiện hiệu suất cơ sở dữ liệu tổng thể của bạn. Có một số cách đã thử và đúng để cải thiện hiệu suất cơ sở dữ liệu thông qua điều chỉnh cú pháp và truy vấn. Chúng tôi đã chọn 5 để tập trung vào.

1. Biểu thức CASE

Dưới đây là một số phương pháp hay nhất để đạt được hiệu suất tốt nhất từ ​​các biểu thức CASE:

  • Biểu thức CASE cải thiện hiệu suất bằng cách chuyển mã thủ tục cũ sang mã khai báo mà sau đó có thể được tối ưu hóa. Đối với các biểu thức CASE cơ bản, hãy sử dụng , đây là cách dễ dàng tối ưu hóa nhất. Đối với các biểu thức CASE mở rộng, băm và các kỹ thuật khác sẽ hữu ích nhất.
  • Bởi vì mệnh đề WHEN được kiểm tra từ trái sang phải, tốt nhất là bạn nên sắp xếp các mệnh đề của mình để những mệnh đề có nhiều khả năng được liệt kê trước. Điều này sẽ cắt giảm thời gian dành cho việc quét không cần thiết.
  • Hầu hết các trình tối ưu hóa cũng đưa ra các kiểm tra dư thừa bằng cách xem xét thứ tự thực hiện. Ngay sau khi mệnh đề WHEN thực thi, không cần phải kiểm tra lại mệnh đề đó. Tuy nhiên, nhiều trình tối ưu hóa không giỏi trong việc đọc các biểu thức CASE lồng nhau, vì vậy tốt nhất bạn nên san bằng chúng thành một cấp duy nhất.

2. Double-Dipping và Điều khoản cửa sổ

Trong SQL, "double-dipping" có nghĩa là truy cập vào cùng một bảng nhiều lần, điều này làm chậm quá trình truy vấn của bạn. Tốt nhất, hãy cố gắng hoàn thành tất cả các công việc của bạn chỉ trong một lần ghé thăm bàn. Nhưng nếu điều đó là không thể, có một số cách để giảm thiểu tác động đến hiệu suất.

Sử dụng các bảng tạm thời được tạo từ cùng một bảng cơ sở được kết hợp với nhau thực sự không phải là cách tốt nhất để tránh lặp lại hai lần. Giải pháp tốt hơn là sử dụng trình tối ưu hóa của công cụ SQL của bạn để hiển thị CHẾ ĐỘ XEM và chia sẻ kết quả dưới dạng bảng làm việc.

Nếu bạn bị giới hạn ở một trình tối ưu hóa kém xuất sắc, hãy sử dụng bảng tạm thời và thực hiện công việc theo cách thủ công.

Mặc dù các phương pháp trên hoàn toàn có thể chấp nhận được, nhưng cách tốt nhất để tránh lặp lại hai lần là sử dụng mệnh đề cửa sổ vì mệnh đề con hoạt động tương tự như các tính năng truy vấn con. Ví dụ:

  • Mệnh đề PARTITION BY giống như một GROUP BY cục bộ chia bảng thành các nhóm.
  • Mệnh đề ORDER BY áp đặt một thứ tự đã được sắp xếp.
  • Khung cửa sổ (ROW hoặc RANGE) giống như một mệnh đề WHERE cục bộ.

Bạn có thể tối ưu hóa các chức năng của cửa sổ bằng cách làm theo các quy tắc sau:

  • Trong chỉ mục, trước tiên hãy sắp xếp trên các cột của mệnh đề PARTITION BY, sau đó trên các cột được sử dụng trong mệnh đề ORDER BY.
  • Bao gồm bất kỳ cột nào khác được tham chiếu trong truy vấn dưới dạng các cột được bao gồm của chỉ mục.

3. Sử dụng các thủ tục được lưu trữ

Trình ánh xạ quan hệ đối tượng (ORM) gây ra nhiều vấn đề về hiệu suất khi chúng tạo mã của riêng mình. Nếu bạn phải sử dụng ORM, hãy viết các quy trình được lưu trữ của riêng bạn để hiệu suất không bị ảnh hưởng.

Có nhiều cách sử dụng các thủ tục được lưu trữ để cải thiện hiệu suất, bao gồm:

  • Họ đẩy ít dữ liệu hơn qua mạng, do đó, giao dịch nhanh hơn
  • Họ cho phép các cuộc gọi ngắn hơn
  • Các thủ tục được lưu trữ dễ theo dõi hơn trong các công cụ hồ sơ
  • Vì một thủ tục được lưu trữ là một đối tượng thực tế trong cơ sở dữ liệu của bạn, nên việc lấy thống kê hiệu suất sẽ dễ dàng hơn, điều này giúp bạn dễ dàng tìm thấy các vấn đề về hiệu suất
  • Việc sử dụng lại kế hoạch thực thi tăng lên
  • Chúng giúp dễ dàng hơn trong việc giải quyết các trường hợp phức tạp và thêm hành vi kiểm tra hoặc khóa thay đổi
  • Các thủ tục đã lưu trữ không dễ bị tấn công SQL injection

4. XÓA và CẬP NHẬT hàng loạt

Xóa hoặc cập nhật nhiều dữ liệu từ quá trình quét bảng lớn sử dụng nhiều tài nguyên vì cả hai câu lệnh đều chạy như một giao dịch duy nhất. Đây là một kẻ giết hiệu suất bởi vì nếu lỗi xảy ra trong khi giao dịch đang chạy và bạn cần phải dừng nó, hệ thống sẽ phải khôi phục toàn bộ giao dịch. Việc cuộn lại một lượng lớn dữ liệu tiêu tốn nhiều thời gian và chặn các giao dịch khác.

Bạn có thể tránh vấn đề hiệu suất này bằng cách cập nhật và xóa theo từng đợt nhỏ. Khi bạn chạy các giao dịch này theo lô, nếu giao dịch bị kết thúc, thì việc hoàn trả sẽ nhỏ hơn nhiều. Việc khôi phục một lượng nhỏ dữ liệu không mất nhiều thời gian và các giao dịch khác có thể hoạt động trong khi lô đang chuyển vào đĩa.

5. Không lấy nhiều cột hơn bạn cần

Một trong những nguyên nhân chính của các truy vấn hoạt động kém là truy xuất các cột không liên quan. Tránh các phương pháp thường dẫn đến việc trả về quá nhiều cột. Hãy ghi nhớ những điều sau:

  • Việc sử dụng không cần thiết "SELECT *" trong một truy vấn có thể sẽ trả về nhiều cột hơn bạn cần. Điều này gây lãng phí tài nguyên và khóa tài nguyên từ những người dùng khác. Điều đặc biệt quan trọng là không sử dụng bừa bãi “SELECT *” trong cơ sở dữ liệu SQL dạng cột.
  • Cắt và dán để sử dụng lại mã có thể dẫn đến các cột không liên quan.
  • Khi bạn gọi một CHẾ ĐỘ XEM, bạn có thể kết thúc với các cột lồng nhau. Bỏ lồng các truy vấn hoạt động kém để kiểm tra cột nào ở đó và loại bỏ các cột quá kích thước mà bạn không cần. Một dấu hiệu tốt cho thấy bạn đang gặp vấn đề là bạn có mệnh đề WHERE với các điều kiện bổ sung và mệnh đề FROM có thêm các phép nối bên ngoài.

Đây chỉ là một số cách tiếp cận tận tâm với cú pháp SQL và viết truy vấn có thể cải thiện việc giám sát cơ sở dữ liệu. Đừng ngại thử một số người khác. Cơ sở dữ liệu hiệu suất cao là chìa khóa để đáp ứng các mục tiêu kinh doanh trong mọi tổ chức.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xuất dữ liệu truy vấn SQL sang Excel

  2. Các truy vấn ANSI JOIN và không phải ANSI JOIN có thực hiện khác nhau không?

  3. Cách lấy ngày hiện tại trong SQL Server

  4. Trả lại số hàng bị ảnh hưởng bởi câu lệnh UPDATE

  5. Giao dịch phân tán trên máy chủ được liên kết giữa máy chủ sql và mysql