2011-01-25 33 views
23

Tôi có một truy vấn phức tạp sử dụng nhiều kết nối (thực tế là 8). Tôi đã nghĩ đến việc đơn giản hóa nó thành một cái nhìn. Sau một ít nghiên cứu, tôi có thể thấy những lợi ích trong sự đơn giản và bảo mật. Nhưng tôi không thấy bất kỳ đề cập về tốc độ.Chế độ xem MySQL có nhanh hơn truy vấn bình thường không?

Chế độ xem có hoạt động như các câu lệnh đã chuẩn bị, trong đó truy vấn được biên dịch trước không? Có hiệu suất đáng chú ý nào đạt được khi sử dụng chế độ xem không?

+2

Một số cơ sở dữ liệu sẽ biên dịch trước chế độ xem, nhưng tôi không tin rằng MySQL sẽ. Bạn có thể muốn xem câu hỏi này: http://stackoverflow.com/questions/1021319/how-to-optimize-mysql-views –

+0

Trái ngược với các câu trả lời - Theo kinh nghiệm của tôi, cho các lượt xem với nhiều kết nối, thực hiện một cách trực tiếp truy vấn chạy nhanh hơn. –

Trả lời

13

Không, chế độ xem chỉ đơn giản là truy vấn văn bản được lưu trữ. Bạn có thể áp dụng WHEREORDER đối với nó, kế hoạch thực hiện sẽ được tính toán với các điều khoản đó được xem xét.

+4

Điều này không đúng. Về cơ bản, đó là chính xác nếu bạn chọn hợp nhất cho thuật toán chế độ xem của mình, nhưng nếu bạn chọn hấp dẫn, nó sẽ thành hiện thực. Không xác định (mặc định, nếu không xác định) cho phép MySQL chọn, có thể làm điều gì đó bạn có thể không mong đợi. – Ray

+0

Tôi không phải là chuyên gia MySQL, nhưng tôi khá chắc chắn rằng thuật toán TempTable kiểm soát cách MySQL xử lý chế độ xem khi các kết quả được yêu cầu và không ảnh hưởng gì đến cách xem được lưu trữ. –

+0

Có, điều này hoàn toàn khác với việc chỉ có một đoạn văn bản được thực thi như thể nó là một truy vấn đặc biệt. – Ray

0

Đôi khi nó có thể hữu ích, nhưng không có dấu đầu dòng bạc. Tôi đã nhìn thấy một cái nhìn giúp hiệu suất, nhưng tôi cũng thấy nó làm tổn thương nó. Một khung nhìn có thể ép buộc hiện thực hóa, đôi khi có thể giúp bạn có được một đường dẫn truy cập tốt hơn nếu MySQL không chọn một đường dẫn tốt cho bạn.

+0

MySQL không hỗ trợ chế độ xem được thực hiện. Vì vậy, tôi không thấy nó có thể giúp thực hiện như thế nào đối với truy vấn tương đương ... – ircmaxell

+0

Họ không gọi nó là quan điểm vật chất hóa, nhưng "hấp dẫn" là một trong các thuật toán xem, gần giống như tên ngụ ý – Ray

+1

Tôi đã xem điều này và thuật toán hấp dẫn là _definitely not_ một phiên bản của các khung nhìn vật chất hóa. Cho đến nay, không có sự hỗ trợ cho các khung nhìn vật chất hóa, hoặc bất kỳ dạng xem nào được giải quyết trước, trong MySQL (trừ khi bạn tự chiếu một khung nhìn vào một bảng theo định kỳ). –

0

Về cơ bản một lượt truy vấn con được lưu trữ. Có cơ bản không có sự khác biệt giữa:

SELECT * 
FROM someview 

SELECT * 
FROM (
    SELECT somestuff 
    FROM underlying table 
); 

trừ quan điểm của di động hơn một chút, khi bạn không cần phải viết ra các truy vấn cơ bản mỗi khi bạn muốn làm việc với bất kỳ dữ liệu nó trở lại.

+1

Và điều gì sẽ xảy ra nếu MySql chọn thuật toán chế độ xem hấp dẫn? – Ray

+2

Tôi hoàn toàn không đồng ý. MySQL VIEW không chỉ là bí danh cho chuỗi truy vấn được lưu trữ.Bạn có thể có những màn trình diễn lớn hoặc thua lỗ nếu bạn sử dụng nó một cách chính xác hay không. Xem câu trả lời của tôi để biết thêm chi tiết. – Juan

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