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

Một chế độ xem có nhanh hơn một truy vấn đơn giản không?

, lượt xem can có chỉ định nhóm chỉ mục và khi có chỉ mục đó, chúng sẽ lưu trữ các kết quả tạm thời có thể tăng tốc các truy vấn kết quả.

Tài liệu riêng của Microsoft nói rõ rằng Chế độ xem có thể cải thiện hiệu suất.

Đầu tiên, hầu hết các chế độ xem mà mọi người tạo đều đơn giản và không sử dụng tính năng này, và do đó không khác gì truy vấn trực tiếp các bảng cơ sở. Các chế độ xem đơn giản được mở rộng tại chỗ và do đó không trực tiếp đóng góp vào việc cải thiện hiệu suất - điều đó là đúng. Tuy nhiên, lượt xem được lập chỉ mục có thể đáng kể cải thiện hiệu suất.

Hãy để tôi đi thẳng đến tài liệu:

Sau khi chỉ mục nhóm duy nhất được tạo trên chế độ xem, tập hợp kết quả của chế độ xem được hiện thực hóa ngay lập tức và được lưu trữ vật lý trong cơ sở dữ liệu, giúp tiết kiệm chi phí thực hiện thao tác tốn kém này tại thời điểm thực thi.

Thứ hai, các chế độ xem được lập chỉ mục này có thể hoạt động ngay cả khi chúng không được tham chiếu trực tiếp bởi một truy vấn khác vì trình tối ưu hóa sẽ sử dụng chúng thay cho tham chiếu bảng khi thích hợp.

Một lần nữa, tài liệu:

Dạng xem được lập chỉ mục có thể được sử dụng trong thực thi truy vấn theo hai cách. Truy vấn có thể tham chiếu trực tiếp chế độ xem được lập chỉ mục hoặc quan trọng hơn, trình tối ưu hóa truy vấn có thể chọn chế độ xem nếu nó xác định rằng chế độ xem có thể được thay thế cho một số hoặc tất cả truy vấn trong kế hoạch truy vấn chi phí thấp nhất. Trong trường hợp thứ hai, dạng xem được lập chỉ mục được sử dụng thay vì các bảng bên dưới và các chỉ mục thông thường của chúng. Chế độ xem không cần phải được tham chiếu trong truy vấn để trình tối ưu hóa truy vấn sử dụng nó trong quá trình thực thi truy vấn. Điều này cho phép các ứng dụng hiện có hưởng lợi từ các chế độ xem được lập chỉ mục mới được tạo mà không cần thay đổi các ứng dụng đó.

Tài liệu này, cũng như các biểu đồ thể hiện các cải tiến về hiệu suất, có thể được tìm thấy tại đây.

Cập nhật 2: câu trả lời đã bị chỉ trích trên cơ sở rằng đó là "chỉ mục" cung cấp lợi thế về hiệu suất, không phải "Chế độ xem". Tuy nhiên, điều này dễ bị bác bỏ.

Hãy để chúng tôi nói rằng chúng tôi là một công ty phần mềm ở một quốc gia nhỏ; Tôi sẽ sử dụng Lithuania làm ví dụ. Chúng tôi bán phần mềm trên toàn thế giới và lưu giữ hồ sơ của chúng tôi trong cơ sở dữ liệu SQL Server. Chúng tôi rất thành công và do đó, trong một vài năm, chúng tôi có hơn 1.000.000 bản ghi. Tuy nhiên, chúng tôi thường cần báo cáo doanh số bán hàng cho mục đích thuế và chúng tôi nhận thấy rằng chúng tôi mới chỉ bán được 100 bản phần mềm của mình ở nước sở tại. Bằng cách tạo chế độ xem được lập chỉ mục của chỉ các bản ghi Lithuania, chúng tôi có thể lưu giữ các bản ghi mà chúng tôi cần trong một bộ đệm được lập chỉ mục như được mô tả trong tài liệu MS. Khi chúng tôi chạy các báo cáo về doanh số bán hàng ở Lithuania vào năm 2008, truy vấn của chúng tôi sẽ tìm kiếm thông qua một chỉ mục có độ sâu chỉ là 7 (Log2 (100) với một số lá không sử dụng). Nếu chúng ta làm điều tương tự mà không có CHẾ ĐỘ XEM và chỉ dựa vào một chỉ mục trong bảng, chúng ta sẽ phải duyệt qua một cây chỉ mục với độ sâu tìm kiếm là 21!

Rõ ràng, bản thân Chế độ xem sẽ cung cấp cho chúng tôi lợi thế về hiệu suất (3 lần) so với việc sử dụng chỉ mục đơn giản. Tôi đã cố gắng sử dụng một ví dụ trong thế giới thực nhưng bạn sẽ lưu ý rằng một danh sách đơn giản về doanh số bán hàng ở Litva sẽ mang lại cho chúng tôi lợi thế lớn hơn nữa.

Lưu ý rằng tôi chỉ sử dụng một cây b thẳng cho ví dụ của tôi. Mặc dù tôi khá chắc chắn rằng SQL Server sử dụng một số biến thể của b-tree, nhưng tôi không biết chi tiết. Tuy nhiên, điểm vẫn giữ nguyên.

Cập nhật 3: Câu hỏi đã đặt ra về việc liệu Chế độ xem được lập chỉ mục có chỉ sử dụng một chỉ mục được đặt trên bảng bên dưới hay không. Có nghĩa là, để diễn giải:"một chế độ xem được lập chỉ mục chỉ tương đương với một chỉ mục tiêu chuẩn và nó không cung cấp gì mới hoặc duy nhất cho một chế độ xem." Nếu điều này là đúng, tất nhiên, thì phân tích ở trên sẽ không chính xác! Hãy để tôi cung cấp một trích dẫn từ tài liệu của Microsoft chứng minh lý do tại sao tôi cho rằng lời chỉ trích này không hợp lệ hoặc đúng sự thật:

Sử dụng các chỉ mục để cải thiện hiệu suất truy vấn không phải là một khái niệm mới; tuy nhiên, các chế độ xem được lập chỉ mục cung cấp các lợi ích hiệu suất bổ sung mà không thể đạt được bằng cách sử dụng các chỉ mục tiêu chuẩn.

Cùng với trích dẫn ở trên liên quan đến tính tồn tại của dữ liệu trong bộ nhớ thực và thông tin khác trong tài liệu về cách tạo chỉ mục trên Chế độ xem, tôi nghĩ có thể an toàn khi nói rằng Chế độ xem được lập chỉ mục là không chỉ là một SQL Select được lưu trong bộ nhớ cache sẽ sử dụng một chỉ mục được xác định trên bảng chính. Vì vậy, tôi tiếp tục đứng trước câu trả lời này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách chia giá trị được phân tách bằng dấu phẩy thành các cột

  2. Cập nhật SQL với row_number ()

  3. Cách cập nhật khóa chính

  4. Sửa đổi lịch biểu tác nhân SQL Server (T-SQL)

  5. Chênh lệch hàng trong SQL Server