让 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中文网其他相关文章!