mysql视图与select性能和延迟

cclgggtu  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(689)

我在这个主题上找到的每一篇文献都表明,使用视图的好处在于它能使代码更简洁。我想知道的是,如果我一个接一个地触发多个select,那么延迟(apache到mysql到apache多次)是否会比使用复杂视图高得多。我有一个场景,我可以采取以下两种方法之一:
使用单个查询。据我所知,mysql就是这样做的,即使我使用视图。但是是否会有延迟问题,因为我将执行一个查询,在php后端对其进行解析以获得下一个查询的过滤器,然后将该查询发送到mysql服务器(以此类推,比如说,在1到4次之间的任何地方,即,我将总共运行2到5个查询)?换句话说,query1->php->query2->php->。。。
构建复杂视图。因为一个表中可能有元素,而另一个表中没有相应的条目,所以最终视图可能有多个并集或联接,即使它是由两个表创建的。但是,既然这里没有延迟问题,所有的处理和过滤都是在mysql服务器端完成的,那么性能会有所提高吗?
什么可以帮助我更快地向用户交付页面?
任何基于实际观察或证明文件的帮助都将受到欢迎。
谢谢。

6yoyoihd

6yoyoihd1#

视情况而定。
一方面,90%的简单查询都是开销(通信、解析等)。因此,到服务器的往返次数越少越好。
另一方面,查询(带或不带 VIEWs )这太复杂了,做事情的效率可能比你把它分解成简单的步骤要低。
我说 VIEWs 是语法上的糖分,而不是性能上的好处(@纳乔说得更好。)
我构建了许多复杂的页面,比如说,其中包含40个查询。表现不错。我找到任何“慢”查询(slowlog很方便),然后优化它们。
我还发现构建一个包含额外信息的页面比强迫用户点击某个页面来打开另一个页面要好。也就是说,将 SELECTs (花费几毫秒)可以产生更好的用户界面。

uxhixvfz

uxhixvfz2#

视图不会修改数据库的性能。性能与它所包含的select相同。视图不用于提高性能或更快地交付页面,它们用于两个方面:
使用视图可以向不同表上的用户授予权限,这样他们就看不到表中的所有信息(他们只看到您想要的内容和您想要的方式)
如果在代码中的不同位置使用相同的select查询,如果需要修改它,可以只修改视图,而不是修改代码中的每个查询

相关问题