2008-11-27 37 views
5

Tôi muốn biết sự khác nhau giữa truy vấn và lượt xem về hiệu suất là gì. Và nếu một lượt xem là tốn kém, điều gì khác ngoài một truy vấn tôi có thể làm để cải thiện hiệu suất?Truy vấn so với Chế độ xem

Trả lời

1

Lượt xem và truy vấn đặc biệt, trong trường hợp đơn giản, gần như giống nhau về hiệu suất. Vì vậy, rất nhiều để khi bạn lập trình với một khung nhìn, bạn nên nghĩ về nó như thể văn bản của định nghĩa khung nhìn đã bị cắt và dán vào truy vấn cha của bạn.

HLGEM chỉ ra câu trả lời của mình rằng một số phiên bản SQL Server nhất định cho phép bạn "lập chỉ mục" - trong trường hợp này, SQL Server duy trì cấu trúc giống như bảng, tạo chế độ xem được lập chỉ mục và bảng rất giống về hiệu suất.

Trong SQL Server, mặc dù bạn có thể nói chung quan điểm tổ khá tự do mà không cần chạy vào vấn đề hiệu suất, nó có thể làm cho mọi việc khó khăn hơn để hiểu và gỡ lỗi.

+0

Trừ khi không. Có vấn đề đó ngay bây giờ. Truy vấn đặc biệt là các đơn đặt hàng có cường độ nhanh hơn cùng một truy vấn được chuyển thành Chế độ xem. Vì vậy, luôn luôn suy nghĩ hai lần. – DanMan

+4

@DanMan đó không thực sự là một nhận xét hữu ích trừ khi bạn có thể giải thích các trường hợp trong đó điều này có thể là trường hợp. –

0

Nếu bạn có nghĩa là hiệu suất mạng sau đó làm việc kể từ một bộ nhớ cache cục bộ (như với DataSets ADO.Net) sẽ làm giảm mạng giao thông là nhưng có thể gây ra vấn đề với khóa. Chỉ là một ý nghĩ.

1

Nếu họ thực hiện chính xác những điều tương tự một cái nhìn có thể nhanh hơn một chút về thực hiện đầu tiên như các máy chủ cơ sở dữ liệu sẽ có một kế hoạch thực hiện biên dịch sẵn cho nó. Tùy thuộc vào máy chủ của bạn mặc dù.

Empasis trên sức mạnh và hơi ...

+0

Chỉ cần làm rõ từ quan điểm của Oracle, khung nhìn không có kế hoạch thực hiện được lưu trữ liên kết với chúng trên nền tảng đó. Định nghĩa chế độ xem được hợp nhất thành truy vấn và toàn bộ truy vấn được tối ưu hóa. –

0

Một quan điểm vẫn còn là một câu hỏi, nó chỉ tóm tắt một số phần của nó để truy vấn của bạn có thể được đơn giản hóa (nếu họ làm những việc tương tự) và để tối đa hóa việc tái sử dụng.

1

Lần thúc đẩy tái sử dụng mã và có thể trừu tượng đi cơ sở dữ liệu phức tạp để đưa ra một 'kinh doanh' chặt chẽ hơn mô hình dữ liệu. Tuy nhiên, chúng gần như không thể điều chỉnh được. Bạn có thể thấy chính mình ở vị trí mà bạn cần cung cấp các gợi ý tham gia hoặc các tối ưu hóa mức thấp khác và nhiều DBA mà tôi đã làm việc không thích chúng được áp dụng cho các lượt xem vì chúng có thể được sử dụng lại trong nhiều truy vấn. các loại gợi ý nên được sử dụng càng ít càng tốt. Tôi thích sử dụng chế độ xem.

2

Trong SQL Server, tôi tin rằng sự khác biệt hiệu suất giữa lượt xem và truy vấn là không đáng kể. Những gì tôi khuyên bạn nên làm để cải thiện hiệu suất là tạo một bảng khác chứa kết quả của khung nhìn. Bạn có lẽ có thể tạo một bảng dàn dựng nơi dữ liệu mới được tổ chức và sau đó một thủ tục lưu sẵn có thể được chạy ở một khoảng thời gian nào đó điền vào bảng làm việc với thông tin mới. Một kích hoạt có thể là tốt cho mục đích này. Tùy thuộc vào yêu cầu của ứng dụng của bạn, thiết kế này có thể hoặc không phù hợp. Nếu bạn đang làm việc với dữ liệu gần thời gian thực, cách tiếp cận này sẽ dẫn đến các vấn đề tương tranh ...

Một điều khác cần xem xét là đảm bảo chắc chắn rằng các bảng cơ sở bạn đang sử dụng để xây dựng chế độ xem của bạn được lập chỉ mục một cách chính xác và chính truy vấn đó được tối ưu hóa. Cuối cùng, tôi tin rằng nó có thể trong SQL Server enterprise để tạo các khung nhìn được lập chỉ mục mặc dù trước đây tôi chưa từng sử dụng chúng.

+0

Các bảng truy vấn 'hiện thực hóa bảng truy vấn' theo cách thủ công thường khó khăn và tốn kém về mặt diabol (về mặt hiệu suất) để duy trì chính xác, thậm chí bỏ qua chi phí không gian đĩa. –

1

Chế độ xem hầu như không đắt hơn máy tính so với việc viết câu truy vấn từ lâu. Chế độ xem có thể lưu người lập trình/người dùng rất nhiều thời gian bằng cách viết cùng một truy vấn theo thời gian, và làm cho nó sai, v.v. Khung nhìn cũng có thể là cách duy nhất để truy cập dữ liệu nếu các khung nhìn cũng được sử dụng để thực thi ủy quyền (kiểm soát truy cập) trên các bảng bên dưới.

Nếu truy vấn không hoạt động tốt, bạn cần xem lại cách truy vấn được hình thành và liệu tất cả các bảng đều có chỉ mục thích hợp trên chúng.Nếu hệ thống của bạn cần thống kê chính xác để trình tối ưu hóa hoạt động tốt, bạn có cập nhật đủ số liệu thống kê gần đây không? Đã có một thời gian dài trước đây, tôi bắt gặp một hệ thống trong đó một trình tạo truy vấn đã tạo một truy vấn liệt kê 17 bảng trong một mệnh đề FROM, bao gồm một số LEFT OUTER JOIN của một bảng với chính nó. Và, trên thực tế, sự giám sát chặt chẽ hơn cho thấy rằng một số 'bảng' trong thực tế là quan điểm nhiều bảng, và một số trong số này cũng liên quan đến các kết nối tự bên ngoài, và tự tham gia vào các kết nối tự bên ngoài của khung nhìn. Để nói "ghastly" là một cách nói. Đã có rất nhiều dọn dẹp có thể để cải thiện hiệu suất của truy vấn đó - loại bỏ các kết nối bên ngoài không cần thiết, tự tham gia, v.v. (Nó thực sự được đặt trước ký hiệu tham gia rõ ràng của SQL-92 - tôi đã nói một thời gian dài trước đây - vì vậy cú pháp nối ngoài là đặc thù DBMS.)

+0

Ugh, tôi đã thấy những khung nhìn gọi trước đó (chúng ta gần như mất khách hàng vì hiệu suất kém mà tôi được gọi để giúp sửa) và họ tàn bạo để duy trì cũng như khủng khiếp cho hiệu suất (và có tham gia cùng một nhiều triệu lần muiltiple ghi lại để có được các lĩnh vực quan điểm intial không cần, ugh). Những loại điều đó khá nhiều đã đánh giá mã của chúng tôi ngay bây giờ! – HLGEM

3

Tôi không thể nói cho tất cả các cơ sở dữ liệu, nhưng trong SQL Server bạn không thể lập chỉ mục các chế độ xem trừ khi bạn có phiên bản Enterprise. Chế độ xem không được lập chỉ mục có thể kém hơn đáng kể về hiệu suất so với truy vấn đặc biệt nếu bạn đang viết một truy vấn chống lại nó để thêm một số điều kiện. Chế độ xem được lập chỉ mục thường có thể hoạt động khá tốt. Chế độ xem được lập chỉ mục cũng có thể chống lại nhiều trường trong bảng differnt và có thể hiển thị hiệu suất qua truy vấn đặc biệt. (Nó có thể không quá, trong điều chỉnh hiệu suất, bạn phải luôn luôn kiểm tra đối với các trường hợp cụ thể của bạn.)

Một điểm chống lại quan điểm là chúng không cho phép lựa chọn thời gian chạy các tiêu chí. Vì vậy, thường bạn kết thúc với cả một cái nhìn và một truy vấn.

Chế độ xem có thể được duy trì dễ dàng hơn (Chỉ cần thêm bảng mới trong một kết nối và mọi thứ truy cập báo cáo tài chính có sẵn) nhưng chúng khó điều chỉnh hiệu suất hơn. Điều này là một phần vì chúng có xu hướng tổng quát hơn và do đó chậm hơn so với các đối tác của họ mà chỉ trả lại mức tối thiểu cần thiết. Và đúng như Jonathan đã nói, bạn có thể dễ dàng tham gia vào các lượt xem cùng nhau để báo cáo thành một mớ hỗn độn tham gia vào cùng một bảng lớn nhiều lần hơn mức cần thiết và rất chậm.

Hai nơi mà chế độ xem tỏa sáng là: Đảm bảo rằng các mối quan hệ phức tạp luôn được mô tả chính xác. Đây là một lý do tại sao các nhà văn báo cáo có khuynh hướng ủng hộ họ. Hạn chế quyền truy cập vào một tập hợp con của các bản ghi

Ngoài ra còn có các hạn chế về loại truy vấn có thể được thực hiện cho một giao diện truy vấn quảng cáo hoc hoặc proc được lưu trữ. Ví dụ, bạn không thể sử dụng câu lệnh if (hoặc mã loại thủ tục khác như vòng lặp) hoặc như đã lưu ý ở trên, bạn không thể cung cấp giá trị thời gian chạy cho tiêu chí where.

Một nơi mà lượt xem thường chậm hơn đáng kể là khi họ gọi các chế độ xem khác. Các khung nhìn cơ bản cần được thực hiện đầy đủ trong một số cơ sở dữ liệu và do đó bạn có thể cần phải gọi 4.459.203 bản ghi để xem 10 bạn cuối cùng quan tâm. Bắt đầu lớp này nhiều lần và nó có thể rất chậm, rất nhanh; lượt xem gọi lượt xem chỉ đơn giản là thực hành kém.

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