2011-05-06 35 views
13

Có thực tiễn chung hay nhất về việc có sử dụng chế độ xem lồng nhau không? Có hiệu suất nào khi sử dụng chế độ xem lồng nhau không? Có một thực hành tốt nhất mà nói rằng có thực sự không phải là một hit hiệu suất cho đến khi bạn đi 4 hoặc nhiều lớp sâu?Số lần xem lồng nhau của Sql Server 2008

Lý do tôi hỏi đây là vì tôi đang đấu tranh với việc có nên sử dụng chúng hay không. Nó không phải là bất thường để có được một yêu cầu báo cáo mà cách duy nhất tôi có thể nhận được quyền truy cập vào thông tin đó là bằng cách tham gia 20 hoặc nhiều bảng với nhau. Các trường không được trả về từ tất cả các bảng nhưng cần thiết để chọn dữ liệu chính xác. Trong trường hợp này, tôi thích lồng ghép các khung nhìn và sử dụng lại các khung nhìn cấp thấp hơn cho các báo cáo khác vì nếu cần thay đổi logic, tôi chỉ cập nhật một khung nhìn và tất cả các báo cáo được cập nhật. Nhiều bảng tôi làm việc có chứa hàng triệu và hàng triệu bản ghi.

Tuy nhiên có lẽ đây không phải là thực hành tốt. Bạn có nhớ chia sẻ suy nghĩ của mình về điều này không?

+2

Các chế độ xem có làm tổng hợp không? Bạn đang tham gia cùng một bảng cơ sở cho chính nó? Nhìn vào kế hoạch thực hiện và xem liệu bạn có nhận được các kế hoạch tối ưu phụ hay không. –

+0

Bạn có thể cung cấp ví dụ về "chế độ xem lồng nhau" không? Tôi chỉ quen thuộc với các thuật ngữ như: xem nội tuyến (bảng dẫn xuất AKA), các khung nhìn không vật chất và vật hoá (các khung nhìn được lập chỉ mục AKA trong SQL Server). –

+1

@OMG - Tôi lấy nó để có nghĩa là Số lượt xem tham chiếu các Chế độ xem khác tham chiếu đến các Chế độ xem khác ... –

Trả lời

11

Tôi sẽ tránh điều này bằng mọi giá. Đầu tiên khi bạn tổ chức các khung nhìn, chúng không thể được lập chỉ mục. Tiếp theo, vì chúng phải thực hiện đầy đủ các khung nhìn cơ bản để đến lớp tiếp theo. Vì vậy, bạn có thể thực hiện nhiều triệu bản ghi để có được kết quả cuối cùng của 5 bản ghi. Chúng tôi gần như mất một khách hàng nhiều triệu đô la vì hiệu suất quá khốc liệt khi các nhà phát triển của chúng tôi thực hiện điều này trên một cơ sở dữ liệu (không phải là cơ sở dữ liệu tôi đã nhập vào thiết kế).

Cuối cùng tôi đã nhận thấy rằng các loại lớp này nhiều, khó duy trì hơn khi bạn cần thay đổi. Thật không vui khi theo dõi qua 12 lớp chế độ xem để tìm ra thứ bạn cần sửa. Chúng tôi cũng gặp phải vấn đề bởi vì các nhà phát triển thấy việc thêm một lớp khác dễ dàng hơn là sửa các lớp cơ bản và sau đó cố gắng truy cập quá nhiều bảng trong một truy vấn và cách quá nhiều bảng đó là cùng một bảng nhiều triệu bản ghi 7 hoặc 8 lần trong các lớp khác nhau của các khung nhìn.

Không có trường hợp nào tôi cho phép nhiều lớp trong chế độ xem trong cơ sở dữ liệu mà tôi quản lý và tôi sẽ tức giận nếu bạn làm điều đó.

+2

+1 SQL là trường hợp lặp lại chính mình để tránh các chế độ xem lồng nhau là thích hợp. – Matthew

+6

Trình tối ưu hóa có thể sử dụng các chỉ mục trong chế độ xem lồng nhau trừ khi logic chế độ xem phức tạp và làm mờ chỉ mục. Các khung nhìn được lập chỉ mục trình bày một tập hợp các vấn đề khác nhau, nhưng đối với các khung nhìn bình thường thực hiện các phép nối đơn giản, việc làm tổ KHÔNG ngăn chặn trình tối ưu hóa sử dụng một chỉ mục. –

+0

Tôi có nghĩa là bạn không thể tạo chỉ mục trên các chế độ xem không phải là chúng không thể sử dụng các chỉ mục cơ bản. Tuy nhiên, bạn có thể nhanh chóng đạt được điểm mà người tối ưu hóa không thể tìm ra cách xử lý hiệu quả. Không chỉ là họ nhanh chóng trở thành một mớ hỗn độn không thể duy trì được. Nó là một khuôn mẫu SQL mà tránh được nếu có thể và nó gần như luôn luôn có thể. – HLGEM

4

Các tùy chọn khác để xem xét: Lượt xem được lập chỉ mục - Có thể nguy hiểm khi sử dụng nếu không được sử dụng đúng cách nhưng hiệu suất có thể tăng đáng kinh ngạc.

Analytics - chẳng hạn như nhóm bộ

thủ tục & bảng tạm - Lấy dữ liệu bạn cần qua thủ tục viết nó ra để bảng tạm thời chọn từ các bảng temp.

Nói chung, tôi không thích lượt xem hiệu suất trên chế độ xem trên chế độ xem hoặc chế độ xem lồng nhau.

Thông thường, bạn có thể tạo một chế độ xem bằng cách sử dụng kết nối chính xác giữa các bảng chứa tất cả thông tin sau và lọc dữ liệu bằng tiêu chí.

+0

Câu hỏi về các chế độ xem được lập chỉ mục. Liệu xem cần phải được xác định rõ ràng hoặc sẽ trình tối ưu hóa đã chọn một cái nhìn được lập chỉ mục ngay cả khi bạn đang đi đến một số bảng cơ sở nhưng trong đường dẫn thực hiện nó xác định xem là tốt hơn. – user742085

+1

Vì vậy, tôi tìm thấy câu trả lời này Khung nhìn không cần phải được tham chiếu trực tiếp trong truy vấn để trình tối ưu hóa sử dụng nó trong kế hoạch thực thi truy vấn. – user742085

+0

@user - Depens on version. Điều này chỉ xảy ra trong phiên bản Enterprise và Developer nếu không bạn cần tham chiếu chế độ xem một cách rõ ràng và sử dụng gợi ý 'noexpand'. –

Các vấn đề liên quan