首页 >数据库 >mysql教程 >如何让MySQL使用索引进行视图查询?

如何让MySQL使用索引进行视图查询?

Barbara Streisand
Barbara Streisand原创
2024-11-12 01:19:02738浏览

How Can I Get MySQL to Use Indices for View Queries?

让 MySQL 使用索引进行视图查询

查询: 我如何鼓励 MySQL 使用索引用于查看查询?

答案:虽然在 MySQL 中使用视图可能并不理想,但是当提供适当的索引结构时,MySQL 可以利用索引进行视图查询。

详细说明:

MySQL 的视图查询是不同的来自其他数据库,因为优化器不会将谓词从外部查询“推送”到视图查询中。在这种情况下,外部查询会在发生的_in上进行过滤,但MySQL在执行视图查询时不会应用此过滤器。

因此,视图查询被单独处理,创建临时表(派生表) 。当外部查询运行时,它使用派生表作为行源,然后评估发生的_in = 2006 谓词。

为了提高性能,可以定义覆盖索引:

CREATE INDEX highscores_IX3 ON highscores (player, happened_in, score)

该索引包括视图查询中引用的所有列,其中player作为前导列(相等谓词),后跟发生的_in(GROUP BY)。包含分数使索引成为覆盖索引,允许 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使用索引进行视图查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

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