视图的索引字段是不是会提高 MySQL 的性能?

Posted

技术标签:

【中文标题】视图的索引字段是不是会提高 MySQL 的性能?【英文标题】:Does indexing fields for views give any performance increase on MySQL?视图的索引字段是否会提高 MySQL 的性能? 【发布时间】:2014-01-13 13:40:14 【问题描述】:

向视图中的表添加索引也可以提高性能。假设我们有以下表格:

汽车

ID (pk) 型号 所有者

轮胎

ID (pk) 汽车ID 尺寸

CAR_DETAILS(查看)

汽车ID 所有者 型号 轮胎尺寸

视图已加入 CAR.ID=TYRES.CarID。现在假设执行以下查询: SELECT model, tyreSize FROM CAR_DETAILS WHERE tyreSize=19;如果您在索引字段上查询视图,TIRES 上的索引大小对您有好处吗?

【问题讨论】:

【参考方案1】:

是的,组成表的索引可用于视图查询。视图通常使用MERGE 算法,该算法基本上将视图上的查询与定义视图的查询合并。你可以这样想:

视图查询:

SELECT * FROM CAR JOIN TYRES ON (CAR.ID=TYRES.CarID)

查询视图:

SELECT model, tyreSize FROM CAR_DETAILS WHERE tyreSize=19

合并查询:

SELECT model, tyreSize FROM CAR JOIN TYRES ON (CAR.ID=TYRES.CarID) WHERE tyreSize=19

查询并没有真正像那样执行,但它让您了解它将如何运行。在您的情况下,可能会使用 tyreSize 上的索引(如果存在)。根据您的其他查询,TYRES.CarID 上的索引也可能会有所帮助。

【讨论】:

以上是关于视图的索引字段是不是会提高 MySQL 的性能?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql中高级操作中的视图_事务_索引_账户权限管理

MySQL性能优化方法三:索引优化

索引一个不断变化的字段是不是合理,或者不断写入会降低性能?

高性能mysql优化---索引优化

CentOS MySQL索引

mysql索引