2011-10-27 28 views
29

Tôi đã nghĩ đến việc bắt đầu sử dụng các khung nhìn để giảm sự phức tạp của mã và truy vấn trong dự án của chúng tôi. dữ liệu đó dễ dàng hơn ở nhiều nơi.MySQL Views và index sử dụng

Có rất nhiều thứ được ném xung quanh, nơi "MySQL không sử dụng chỉ mục cho chế độ xem", "Bạn không thể có chế độ xem được lập chỉ mục", "Chỉ khi bạn sử dụng MERGE" ... Không rõ ràng câu trả lời.

Vì vậy, để cắt theo đuổi: Chế độ xem MySQL có sử dụng chỉ mục trên các bảng được tạo từ không? Có phải là một ý tưởng tồi khi sử dụng các quan điểm vì hiệu suất sẽ không đáng kể, hay nó sẽ sử dụng các chỉ mục trên các bảng bên dưới khi thực hiện các phép nối của nó? Nếu tôi sắp xếp một chế độ xem theo một cột được lập chỉ mục trong bảng, nó có sắp xếp nhanh như bình thường không?

Làm nghiên cứu của tôi dường như chỉ ra rằng các khung nhìn không sử dụng các chỉ mục, nhưng nếu đó là trường hợp không ai sẽ sử dụng chúng; rõ ràng mọi người làm, vậy ...?

Xin lỗi nếu điều này có vẻ vô lý.

+0

Xem http://stackoverflow.com/q/244226/632951 – Pacerier

Trả lời

29

Nếu bạn truy vấn chế độ xem, MySQL sẽ xem xét sử dụng các chỉ mục trên các bảng bên dưới.

Tuy nhiên, đó là không có thể thêm chỉ mục mới vào cột được tính trong chế độ xem. Tôi nghĩ rằng đây là những gì mọi người có ý nghĩa bởi MySQL không có các khung nhìn được lập chỉ mục, trái với (ví dụ) SQL Server's indexed views.

+0

Tôi đã bắt đầu tin rằng đó là trường hợp, nhưng tôi muốn hoàn toàn chắc chắn trước khi tôi cam kết bất cứ điều gì. Cảm ơn một tấn. – Xkeeper

15

Chế độ xem MySQL có sử dụng chỉ mục trên các bảng được xây dựng không?

Có.

Mọi người có thể tham khảo khi họ nói MySQL doesn't use indexes for views có tên là materialized views hoặc indexed views nơi chế độ xem thực tế được lưu trữ trên thực tế trên hệ thống tệp như bảng thông thường. Các chỉ mục có thể được tạo cho các khung nhìn này trên một số DBMS như Oracle hoặc SQL Server. Về cơ bản, indexed views trở thành bản sao của các bảng gốc soạn và là kept in sync automatically, loại nói.

Đọc bài viết này về Indexed Views trên SQL Server, chẳng hạn.

+0

Tôi hiểu ... Tôi ước tôi có thể chấp nhận cả hai câu trả lời của bạn bởi vì cả hai đều rất, rất tốt. Trên lưu ý đó, có vẻ như người ta có thể psuedo-gimp một giải pháp bằng cách kích hoạt dựa trên INSERT/UPDATE tạo ra một bảng dựa trên khung nhìn (có thể?), Nhưng đó sẽ là một hit hiệu quả như là vô dụng bên ngoài một cơ sở dữ liệu đã lưu trữ. – Xkeeper

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