sqlserver数据库索引的一些经验(解决少量的死锁问题)

  1. sqlserver的索引类型一共四种(见过四种),XML索引跟Spatial索引在小型的数据量的时候应该是用的少的(大的数据一般都存文件了,然后在数据库存一些大的数据里面的关键量然后加一个字段指向这个文件应该是最好的选择了,在需要详细数据的时候再去读文件),主要是聚集索引跟非聚集索引这两种。
  2. 索引使用的地方:
    主要视情况来选择把索引建立在什么地方(唯一索引是个特殊情况,最好是在前期建立好,既可以避免出现数据重复,也可以加快查询速度(后面建唯一索引,如果有重复的你就必须先得把重复的处理掉蛋疼))。
    第一种情况是在数据库刚刚建立时,这个时候通常你不知道有哪些字段是会经常用到的,这个时候一般只需要建一个主键索引加一个你确定会经常用到查询条件的字段就可以了,为什么在刚开始的时候只建少量索引,主要考虑的情况是刚建立的时候有很多的需求还不明确还不确定会正常使用的sql跟耗时的sql会是哪些,而且一般前期的数据量都不会导致处理数据库查询很慢的情况,索引就没有那么迫在眉睫,而且如果你在前期就建立了太多的索引会导致你后面的优化变得更加艰难,因为后面更多的需求来的时候,你首先要删掉或者修改以前建的索引,如果不这样的话索引太多了,反而会导致数据库的插入跟更新会变得很慢。
    第二种情况是数据库出现瓶颈的时候,这个时候一般是数据量变大了以后,导致数据库操作变慢甚至导致死锁,这种情况相对于第一种情况来说,可能你已经了解到业务中使用量比较打的sql是哪一些了,就可以针对性的建立索引,主要选择的依据是找到你sql耗时跟死锁比较多的表相关的sql,然后审核这些sql看里面耗时最多是哪几个,然后在这几个sql中选择WHERE条件的第一个建立索引,可以选多个条件单独建立索引,也可以建立组合索引(主要是看这些索引有没有对应的关系,什么关系的没得最好不要搞,越搞越慢),也可以在group by类上加上索引,前提是你这个group by的字段用的比较多。
  3. 选择使用索引的类型
    针对上面的两种情况分别选择索引的类型。
    第一种,建立初期的两个索引一般情况下都是一个主键索引加一个非聚集索引的字段(如果确定你之后的业务肯定会大量用到某个字段也可以直接建立聚集索引,因为一个表的聚集索引只能有一个,省着用)。
    第二种,如果你的某个sql耗时特别多,针对这个sql的where条件的字段建立索引往往是很好的选择,至于是选择聚集索引还是非聚集索引就看这个字段的不同值的个数,如果个数很少就可以建立聚集索引(如果只有一两个不同值就不要建立索引了),多就建立非聚集索引

你可能感兴趣的:(sql)