Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chế độ xem MySQL có luôn quét toàn bộ bảng không?

Các chế độ xem trong MySQL không được lập chỉ mục vì vậy bản chất của chúng yêu cầu quét toàn bộ mỗi khi chúng được truy cập. Nói chung, điều này làm cho Chế độ xem chỉ thực sự hữu ích cho những trường hợp bạn có một truy vấn tĩnh khá phức tạp trả về một tập hợp kết quả nhỏ và bạn định lấy toàn bộ tập kết quả mọi lúc.

Chỉnh sửa: Tất nhiên Chế độ xem sẽ sử dụng các chỉ mục trên các bảng bên dưới để Bản thân Chế độ xem được tối ưu hóa (nếu không thì chúng sẽ không có ý nghĩa gì khi sử dụng) nhưng vì không có chỉ mục nào trên Chế độ xem nên không thể thực hiện truy vấn WHERE trên Chế độ xem được tối ưu hóa.

Việc tạo chỉ mục cho Chế độ xem dù sao cũng sẽ tốn kém bởi vì mặc dù tôi chưa cố gắng lập hồ sơ bất kỳ Chế độ xem nào, nhưng tôi khá chắc chắn rằng một bảng tạm thời được xây dựng ở phía sau và sau đó tập kết quả được trả về. Đã mất rất nhiều thời gian để xây dựng bảng tạm thời, tôi sẽ không muốn một chế độ xem cũng cố gắng đoán những chỉ mục nào là cần thiết. Điều này dẫn đến điểm thứ hai là MySQL hiện không cung cấp một phương pháp để chỉ định những chỉ mục nào sẽ sử dụng cho một Chế độ xem, vậy làm thế nào nó biết được những trường nào cần được lập chỉ mục? Nó có đoán dựa trên truy vấn của bạn không?

Bạn có thể cân nhắc sử dụng Bảng Tạm thời vì sau đó bạn có thể chỉ định các chỉ mục trên các trường trong bảng tạm thời. Tuy nhiên, theo kinh nghiệm, điều này có xu hướng thực sự rất chậm.

Nếu tất cả dạng xem này chứa là CHỌN TẤT CẢ TỪ table1, table2, table3; thì tôi sẽ phải hỏi tại sao truy vấn này cần phải ở trong Chế độ xem? Nếu vì lý do nào đó mà nó thực sự cần thiết, bạn có thể muốn sử dụng một thủ tục được lưu trữ để đóng gói truy vấn vì sau đó bạn sẽ có thể có được hiệu suất tối ưu hóa trong khi vẫn duy trì lợi ích của một lệnh gọi đơn giản hơn đến cơ sở dữ liệu cho tập kết quả.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. truy vấn sql:làm thế nào để làm cho các thẻ không có con trở thành cha mẹ?

  2. Hibernate- không thể khởi tạo một cách lười biếng tập hợp vai trò:bean.Language.patients, không thể khởi tạo proxy - không có phiên

  3. Cách lấy thời gian từ một chuỗi trong MySQL

  4. MySQL:Đếm các hàng riêng biệt mỗi ngày

  5. MySQL năm 2018:Có gì trong 8.0 và các quan sát khác