数据库点滴积累——索引

索引

1、复合索引(where a and b)如果没有对a和a做单一索引,查询的时间为a;如果对a做单一索引,查询时间为b;如果对b做单一索引,查询时间为c;如果对a,b做复合索引,查询时间为d,那么时间的比较就应该是a>b=c>d;(比如spMsgreader_Distribute中使用where inforID=@infoID and  UserID=@userID,插入7000次的时候就明显的看到性能了;(8秒:1:50秒)注意升序和降序的区别?)

2、当高选择性的非聚集索引达到5%的选择性时,该索引时非常有用的

3、关于复合索引属性列位置问题,应该把高选择性的列放在坐左边(以前就忽略了这个高选择性的位置),那个通过IP和UrlID的SARG中我们可以创建一个IP和UrlID的复合索引,通过业务来说,我们测试的时候可能是比较大,但是在生成环境中,应该是UrlID的重复量会比较大,所以就IP放在复合索引的最左边。

4、对EasyUrl跳转功能中,需要通过输入地址来查询目标地址,这个数据库查询可以使用覆盖索引,查询的速度是最快的。

5、当返回一个聚集索引列和一个非聚集索引列,并且是使用非聚集索引属性作为sarg,那么这也是一个索引覆盖查询,因为在非聚集索引包括聚集索引,所以直接在B-Tree就返回了数据,不用查询数据页

6、在查询select语句中使用where子句限制返回的行数和列数,避免表扫描,如果返回不必要的数据,浪费了服务器的I/O资源,家中网络的负担降低了性能。

7、对于长字符列的索引,我们可以使用哈希索引,也就是checksum函数,具体用法可以看帮助文档;通常情况下我们对长字符列建立索引的,而且我们的业务逻辑中对长字符作为内容的搜索也是不常见的,但是如果需要,可以考虑哈希索引,有些同学可能会说为什么不用全文索引呢?因为毕竟全文索引时要花费很多磁盘空间和IO操作的。

转自http://gaizai.cnblogs.com/

 

posted @ 2012-01-20 20:45  指尖流淌  阅读(385)  评论(2编辑  收藏  举报