标签:
聚集索引的顺序就是数据的物理存储顺序,因此一个表最多只能有一个聚集索引。
非聚集索引的顺序与物理存储顺序无关。
SQL Server中的数据是按照B树来索引,那么聚集索引的叶结点存储的是数据本身,而非聚集索引的叶结点,只存储数据的引用,指针。
SQL Server以页为单位存储数据,一个页占用8k的空间,在分配空间时以8个页,即一个盘区64k为单位。
数据库读取
逻辑读取,在执行查询时,是读取存放在内存中的页,这些页是数据库预先读取到内存中去的。
物理读取,在执行查询时,SQL Server会检查所需数据是否存在于内存中,如果没有,会从硬盘读取到内存中去。
预读取,一个SQL Server处理的读取,将一部分数据预先读取到内存中,这些数据未必都是有需求的。
填充因子
在新增数据时,如果当前页已经满了,会拆分出新页,同时产生索引碎片。填充因子是在页中填充数据的比例,默认是100%,如果在一个页中设置填充因子是90%,那么在下一次新增数据的时候,页就不会拆分了(数据不是很大),也不会产生索引碎片,但是这样会需要更多的存储空间,也会加大B树的深度,直接影响数据库效率。
一般来讲,填充因子的设置是因情况而定的。
如果一个表大部分的操作都是读取,那么可以设置填充因子为100%,因为很少会有拆分出新页的时候。如果读取和写入的操作各占一半,可以设置为80,90的比例。如果有大量的写入操作,那么就设置为50,70的比例。
当然,也可以将填充因子设置到100%,然后经常检查索引碎片,在需要的时候重建索引。
建立索引的原则
建立索引的字段尽量小,int的索引比text索引好很多
建立索引的字段唯一性尽量高,不要在一亿数据的表上用性别建立索引。
SQL优化
尽量避免表达式放在where的左边
尽量避免where中出现!=和<>
尽量避免where对字段进行null判断
尽量避免使用游标,可以用while循环代替
尽量避免返回大量的数据,可以使用分页
不要使用select *
尽量避免使用in和not in,可以使用exists代替
标签:
原文地址:http://www.cnblogs.com/pzpzpop/p/4898478.html