2011-01-07 37 views
8

Kịch bản:Truy vấn trên một khung nhìn chậm hơn so với thực hiện SQL trực tiếp?

Tôi có 3 bảng cần được nối với nhau, mệnh đề where để giới hạn tập kết quả và chỉ một vài cột từ mỗi bảng được chọn. Đơn giản. Tuy nhiên, các truy vấn để làm điều này không phải là rất đẹp, và khi sử dụng một ORM giữa cơ sở dữ liệu và ứng dụng, nó giống như cố gắng để đặt một hình vuông peg vào một lỗ tròn.

Cách của tôi để giải quyết vấn đề này là tạo chế độ xem bao trùm truy vấn và giờ đây mô hình ứng dụng của tôi ánh xạ trực tiếp đến chế độ xem trong cơ sở dữ liệu; không còn điên lập bản đồ lớp ORM nữa.

Câu hỏi: Giả sử không có yếu tố nào khác phát huy ở đây, truy vấn ngược lại sẽ chịu thêm bất kỳ hình phạt hiệu suất bổ sung nào mà tôi sẽ không trúng nếu tôi thực hiện câu lệnh SQL trực tiếp? - Đây không phải là chế độ xem được lập chỉ mục, giả sử cùng một mệnh đề where, giữ điều này đơn giản.

Tôi đang được cho rằng tin rằng một lượt xem bị thêm phí trên "đang được xây dựng". Sự hiểu biết của tôi là với tất cả những người khác giống nhau, cả hai nên có hiệu suất giống nhau.

Vui lòng làm rõ. Cảm ơn!

+1

Phụ thuộc vào cơ sở dữ liệu của bạn và nhiều thứ khác. Nếu đó là MySQL, thì câu trả lời là Có, nó chậm hơn. – nos

Trả lời

4

Từ MSDN: View resolution

Khi một câu lệnh SQL tham chiếu một cái nhìn nonindexed, phân tích cú pháp và truy vấn tối ưu hóa phân tích nguồn gốc của tất cả các câu lệnh SQL và quan điểm và sau đó giải quyết chúng thành một kế hoạch thực hiện duy nhất. Không có một kế hoạch cho câu lệnh SQL và một kế hoạch riêng cho khung nhìn.

Không được có hiệu suất khác. Chế độ xem giúp bạn sắp xếp, không phải bất kỳ cải tiến hiệu suất nào. Trừ khi bạn đang sử dụng chế độ xem được lập chỉ mục.

Chỉ định nghĩa của chế độ xem không được lập chỉ mục được lưu trữ, không phải các hàng của chế độ xem. Trình tối ưu hóa truy vấn kết hợp logic từ định nghĩa khung nhìn vào kế hoạch thực thi mà nó xây dựng cho câu lệnh SQL tham chiếu chế độ xem không được lập chỉ mục.

+0

Miễn là chế độ xem được chạy trước khi không có sự khác biệt. Trên thực tế, chế độ xem có thể hơi nhanh hơn vì có thể có kế hoạch truy vấn được lưu trong bộ nhớ cache. – Matthew

3

Trong Oracle, hiệu suất là như nhau. Một khung nhìn thực sự là một câu lệnh sql có tên. Nhưng fancier.

Khi bạn bắt đầu chế độ xem lồng nhau và tham gia chế độ xem với bảng hoặc chế độ xem khác, mọi thứ trở nên phức tạp thực sự nhanh chóng. Nếu Oracle không thể đẩy các bộ lọc của bạn xuống khung nhìn vào bảng, nó thường phải thực hiện (xây dựng một bảng tạm thời) các phần của truy vấn, và đây là khi bạn nhận được hiệu suất kém.

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