类似于MySQL中PostgreSQL的“仅索引扫描”

时间:2016-04-10 18:17:23

标签: mysql sql performance postgresql indexing

在分析某些查询的PostgreSQL查询执行计划时,您可以利用Index-only scans

  

仅索引扫描是Postgres 9.2中添加的主要性能功能。它们只允许通过从索引而不是从表中检索数据来满足某些类型的查询。

你可以在MySQL中使用类似的东西吗?

2 个答案:

答案 0 :(得分:2)

有趣的是,你想在Mysql中使用像Postgres仅索引扫描这样的东西 因为在Postgres 9.2之前很久就有Mysql这个功能。但在mysql中,此功能称为covering index

  

包含查询检索的所有列的索引。代替   使用索引值作为指针来查找完整的表行,   查询返回索引结构中的值,从而节省磁盘I / O. InnoDB的   可以将此优化技术应用于比MyISAM更多的索引,   因为InnoDB二级索引还包括主键列。   InnoDB无法将此技术应用于针对已修改表的查询   通过交易,直到该交易结束。

     

任何列索引或复合索引都可以作为覆盖索引,   给出正确的查询。设计索引和查询   尽可能利用这种优化技术的优势。

答案 1 :(得分:1)

是 - 如果查询有覆盖索引,MySQL可能只读取索引,而不是表数据。

http://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html

  

在某些情况下,可以优化查询以在不咨询数据行的情况下检索值。 (为查询提供所有必要结果的索引称为覆盖索引。)如果查询仅使用表中包含某些索引的列,则可以从索引树中检索所选值以获得更快的速度: / p>

SELECT key_part3 FROM tbl_name
 WHERE key_part1=1