首页  >  文章  >  数据库  >  为什么MySQL不能使用索引进行视图查询?

为什么MySQL不能使用索引进行视图查询?

Linda Hamilton
Linda Hamilton原创
2024-11-11 04:05:02605浏览

Why Can't MySQL Use Indexes for View Queries?

MySQL 不能使用索引进行视图查询吗?

尽管面临着对视图有效性的怀疑,但你面临的问题来自于优化器无法将谓词推送到视图查询中。

MySQL 单独执行视图查询,具体化在执行外部查询之前,将结果存储在中间“派生”(MyISAM) 表中。此过程会在视图查询执行期间跳过对外部查询谓词的考虑。

解决性能问题

要提高视图查询的性能,请优化索引结构:

创建覆盖索引:

定义一个“覆盖”索引,其中包含视图查询中引用的所有列。在这种情况下,创建以下索引:

ON highscores (player, happened_in, score)

此索引将允许 MySQL 通过“使用索引”访问视图查询,并避免更昂贵的“使用文件排序”。

评估独立查询:

将视图查询的执行计划与服务的独立查询进行比较类似的目的:

SELECT player
     , MAX(score) AS highest_score
     , happened_in
 FROM highscores
WHERE player = 24
  AND happened_in = 2006
GROUP
   BY player
    , happened_in

这个独立查询也可以利用覆盖索引,但它消除了实现中间表的开销。

结论:

优化 MySQL 中视图查询的关键在于设计优化器可以利用的合适索引。视图查询本质上是单独的查询,它们在被外部查询引用之前具体化。了解这种行为对于避免在 MySQL 中使用视图时可能出现的性能陷阱至关重要。

以上是为什么MySQL不能使用索引进行视图查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn