MySQL视图 - 何时使用&何时不使用

ice*_*l89 23 mysql sql views

mysql认证指南建议视图可用于:

  • 创建可能涉及计算的摘要
  • 选择一组带有WHERE子句的行,隐藏不相关的信息
  • 加入或结合的结果
  • 允许通过保留原始表的模式以适应其他应用程序的视图对基表进行的更改

但是从如何实现搜索2个不同的表数据?

也许你是对的,它不起作用,因为mysql视图不是索引的好朋友.但仍然.在商店餐桌上有什么可以搜索的吗?

我知道这些观点在索引方面不能很好地工作,所以它会给它提供方便吗?

Raj*_*ore 13

可以简单地将视图视为永久存储在服务器上的SQL查询.将使用查询优化的任何索引.从这个意义上讲,SQL查询或视图之间没有区别.它不会比实际的SQL查询更负面地影响性能.如果有的话,因为它存储在服务器上,并且不需要在运行时进行评估,所以它实际上更快.

它确实为您提供了这些额外的优势

  • 可重用性
  • 优化的单一来源


mar*_*kus 11

这个关于索引视图的mysql-forum-thread提供了很多洞察mysql视图的实际内容.

一些关键点:

  • 视图实际上只是存储的select语句
  • 视图的数据是View引用的表的数据.
  • 在视图上创建索引将不适用于当前版本
  • 如果使用合并算法,则将使用基础表的索引.
  • 然而,潜在的指数是不可见的.对视图的DESCRIBE将不显示索引列.


rad*_*gex 10

根据 MySQL 官方文档,MySQL 视图是存储的查询,调用时会生成结果集。

数据库视图只不过是一个虚拟表或逻辑表(通常由带有连接的 SELECT 查询组成)。因为数据库视图类似于由行和列组成的数据库表,所以您可以根据它查询数据。

在以下情况下应使用视图:

  • 简化复杂的查询(如 IF ELSE 和 JOIN 或使用触发器等)
  • 增加额外的安全层并限制或限制数据访问(因为视图只是虚拟表,可以设置为对特定的数据库用户集只读并限制 INSERT )
  • 向后兼容性和查询可重用性
  • 使用计算列。计算列不应该在 DB 表上,因为 DB 模式将是一个糟糕的设计。

在以下情况下不应使用视图:

  • 关联表是暂定的或经常发生结构变化。