当前位置:  开发笔记 > 后端 > 正文

MySQL:视图与存储过程

如何解决《MySQL:视图与存储过程》经验,为你挑选了3个好方法。

由于MySQL开始支持存储过程,我从未真正使用过它们.部分是因为我不是一个伟大的查询作家,部分是因为我经常与为我做出这些选择的DBA合作,部分原因是因为我对我知道的事情很满意.

在进行数据选择方面,特别是在考虑一个基本上是去规范化(连接)和聚合(avg或max,子查询和计数等)数据选择的选择时,MySQL 5.x中的正确选择是什么?一个看法?还是存储过程?

我很满意的观点 - 你知道你的SELECT查询应该是什么样的,所以你只需要创建它,确保它被编入索引,然后只做一个CREATE VIEW [View] AS SELECT [...].然后,在我的应用程序中,我将视图视为只读表 - 它表示我的规范化数据的非规范化版本.

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

我希望在谷歌搜索这个主题时找到一些很难找到的"引擎盖"信息,但我真的很欢迎所有的评论和答案.



1> Chris Johnst..:

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

视图可用于为数据提供备用或简化的"视图".因此,我会选择一个视图,因为您并没有真正操纵数据,就像找到一种不同的显示方法一样.



2> Learning..:

不知道这是一个选择。存储过程可以完成视图可能遇到的各种各样的事情(考虑将数据填充到临时表中,然后在其上运行游标,然后进行聚合并返回结果集)。

另一方面,视图可以隐藏复杂的sql /访问权限,并提供架构的修改视图。

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



3> Chris Nava..:

我使用视图进行非标准化或输出格式化,并使用存储过程进行过滤和数据处理(需要参数输入的事物)或迭代(游标)。

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

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有