码迷,mamicode.com
首页 > 数据库 > 详细

SQL Server索引

时间:2015-10-21 19:09:27      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

聚集索引的顺序就是数据的物理存储顺序,因此一个表最多只能有一个聚集索引。

非聚集索引的顺序与物理存储顺序无关。

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代替

 

SQL Server索引

标签:

原文地址:http://www.cnblogs.com/pzpzpop/p/4898478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!