代码之家  ›  专栏  ›  技术社区  ›  Peter Bailey

MySQL:视图与存储过程

  •  29
  • Peter Bailey  · 技术社区  · 17 年前

    自从MySQL开始支持存储过程以来,我从未真正使用过它们。部分原因是我不是一个优秀的查询编写者,部分原因是我经常与为我做出这些选择的DBA一起工作,部分原因是我对我所知道的很熟悉。

    在进行数据选择方面,特别是在考虑本质上是数据的非规范化(联接)和聚合(平均或最大、子查询w/counts等)选择的选择时,MySQL 5.x中的正确选择是什么?风景?还是存储过程?

    我很熟悉的视图-您知道您的SELECT查询应该是什么样子的,所以您只需创建它,确保它已被索引等等,然后只需执行 CREATE VIEW [View] AS SELECT [...]

    这里的缺点是什么?如果有的话?如果我将完全相同的SELECT语句移动到存储过程中,会有什么变化(收益或损失)?

    我希望能找到一些好的“幕后”信息,在谷歌搜索这个话题时很难找到,但我真的欢迎所有的评论和答案。

    4 回复  |  直到 10 年前
        1
  •  13
  •   Chris Johnston    17 年前

    在我看来,当同一个例程需要在多个不同的应用程序之间使用,或者用于数据库或表之间的ETL时,存储过程应该仅用于数据操作,仅此而已。基本上,尽可能多地使用代码,直到遇到DRY原则,或者您所做的只是将数据从数据库中的一个位置移动到另一个位置。

    视图可用于为数据提供替代或简化的“视图”。因此,我会选择一个视图,因为您实际上并不是在操纵数据,而是在寻找一种不同的显示方法。

        2
  •  7
  •   Learning    17 年前

    不确定是否是非此即彼的选择。存储过程可以做很多视图难以完成的事情(比如在临时表中填充数据,然后在临时表上运行游标,然后进行聚合并返回结果集)。

    另一方面,视图可以隐藏复杂的sql/访问权限,并显示模式的修改视图。

    我认为两者都在方案中占有一席之地,并且对于成功的模式实现都很有用。

        3
  •  6
  •   Chris Nava    17 年前

    当需要反规范化和过滤时,我经常访问存储过程中的视图。

        4
  •  5
  •   bob    11 年前

    但是,您可以传入这些搜索参数,并直接对下划线(索引)表运行查询。缺点是每次运行过程时都需要获取结果,根据服务器配置的不同,在视图中也可能出现这种情况。