日期:2014-05-17  浏览次数:20322 次

关于索引影响性能的问题
在频繁变动的表上建立过多的索引会影响性能这个是知道的。

但是如果索引是建立在不怎么变动的字段上,会不会影响呢?

比如商品表,有名称,ID,数量三个字段。数量是经常变动的(几乎时刻都在update),但是名称和ID很少变化,这样的表只会偶尔增减记录而已,一天不超过10条。

那么我在名称和ID上建立各种索引,会不会影响性能?

------解决方案--------------------
不update索引key就不影响。
------解决方案--------------------
要看你的使用,不管是否频繁更新,索引过多都会引起存储空间、维护开销和非SELECT的DML操作的开销。但是一般来说,几乎所有应用系统的查询操作都远比更改多。既然你的列很少变动,那么它可以作为考虑,但是还要考虑数据类型、使用的时候是否频繁出现在WHERE、join中。简单来说:看使用方式而定
------解决方案--------------------
还是看表的大小,更新的程度。不更新字段建立索引,不会太影响更新性能。
------解决方案--------------------
 不update的字段上建立索引,也有问题
索引变慢时索引碎片导致
索引碎片造成,原因是索引根据其顺序插入数据超过了一页后进行页分割导致
也就是说insert也会导致索引碎片
除非你的新增数据是按照索引顺序增加的
比如对一个varchar类型建立索引
你insert新的语句总是按照 a,b,c,d,e的递增,那么你得这个索引将不存在碎片
但你后续又会insert b,c那么当超过原有b,c所在页大小后,就会产生页分割,导致索引碎片
------解决方案--------------------
索引优化,实际上建立在牺牲存储来换取性能,一个表只要有更新删除插入操作,就会出现索引逻辑碎片和区碎片,关键是你如何维持平衡,单表建立索引不要超过5个,当然,数据仓库之类的表可以1:1。
建立索引目的是为了提高查询性能,你建什么样的索引要考虑查询需求。