在频繁变动的表上建立过多的索引会影响性能这个是知道的。但是如果索引是建立在不怎么变动的字段上,会不会影响呢?比如商品表,有名称,ID,数量三个字段。数量是经常变动的(几乎时刻都在update),但是名称和ID很少变化,这样的表只会偶尔增减记录而已,一天不超过10条。那么我在名称和ID上建立各种索引,会不会影响性能?

解决方案 »

  1.   

    要看你的使用,不管是否频繁更新,索引过多都会引起存储空间、维护开销和非SELECT的DML操作的开销。但是一般来说,几乎所有应用系统的查询操作都远比更改多。既然你的列很少变动,那么它可以作为考虑,但是还要考虑数据类型、使用的时候是否频繁出现在WHERE、join中。简单来说:看使用方式而定
      

  2.   

     不update的字段上建立索引,也有问题
    索引变慢时索引碎片导致
    索引碎片造成,原因是索引根据其顺序插入数据超过了一页后进行页分割导致
    也就是说insert也会导致索引碎片
    除非你的新增数据是按照索引顺序增加的
    比如对一个varchar类型建立索引
    你insert新的语句总是按照 a,b,c,d,e的递增,那么你得这个索引将不存在碎片
    但你后续又会insert b,c那么当超过原有b,c所在页大小后,就会产生页分割,导致索引碎片