mysql 5.6物化视图_mysql 物化视图

MySQL在处理视图查询时,不会将外部查询的谓词推到视图中,可能导致性能问题。物化视图会先生成一个中间MyISAM表,再执行外部查询。要提高视图查询性能,应创建覆盖索引,如ON highscores (player, happened_in, score),使得查询能直接从索引中获取所有需要的数据,避免文件排序。对比独立查询,使用覆盖索引的视图查询能避免中间派生表的生成,提高效率。" 107197865,676489, IndyFTPClient 实例:上传与下载文件操作指南,"['FTP客户端', '网络编程', '文件操作', ' Indy组件', '上传下载']
摘要由CSDN通过智能技术生成

如何让MySQL使用索引进行视图查询?简短的答案,提供了MySQL可以使用的索引。

在这种情况下,最佳索引可能是“覆盖”索引:

... ON highscores (player, happened_in, score) MySQL可能会使用该索引,并且EXPLAIN将显示:"Using index"由于WHERE player = 24 (索引前导列上的相等谓词。索引中GROUP BY happened_id的第二列),MySQL可能会使用索引来优化该索引。避免排序操作score,在索引中包含该列将使查询完全可以从索引中满足,而不必访问(查找)索引所引用的数据页。

那是快速答案。更长的答案是,MySQL非常不可能happened_id在视图查询中使用前导列的索引。

为什么视图会导致性能问题

MySQL视图的问题之一是MySQL不会将谓词从外部查询“推”到视图查询中。

您的外部查询指定WHERE happened_in = 2006。MySQL优化器在运行内部“视图查询”时不会考虑该谓词。该视图查询将在外部查询之前单独执行。该查询执行的结果集“物化”;也就是说,结果存储为中间MyISAM表。(MySQL称它为“派生表”,当您了解MysQL执行的操作时,它们使用的名称就很有意义。)

最重要的是,happened_in当MySQL破坏形成视图定义的查询时,您正在使用的索引将不被MySQL使用。

创建中间“派生表”之后,然后使用该“派生表”作为行源来执行外部查询。在外部查询运行时,对happened_in = 2006谓词进行评估。

请注意,存储了视图查询的所有行,(在您的情况下)是EVERY值的行happened_inÿ

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值