SQLSERVER索引
2014-04-04 15:07
288 查看
减少磁盘I/O和逻辑读次数的最佳方法之一就是使用索引,索引允许SQLSERVER在表里查询数据而不需要扫描整个表。
当没有聚簇索引存在以建立数据的存储顺序时,存储引擎将简单地遍历整个表以查找所需要的。没有聚簇索引的表被称为堆表(Heaptable)
一个页面的空间有限,所以一行包含的列数越少,它就能保存越多的行。非聚簇索引通常不包含所表列,它一般只包含有限数量的列,因此一个页面将能包含比表行本身更多行的非聚簇索引。因此,SQLServer能够从表现一个非聚簇索引的页面中读到比从表现包含该列的表的页面上更多的值。
非聚簇索引的好处是,它有一个独立于数据表的结构,所以可以被放置在不同的文件组,使用不同的I/O路径,这意味着SQLSERVER可以并行访问索引和表,使找更快速。
索引用B-树结构存储,所以查找特定行所需要的读操作被最小化了。
索引给性能带来的好处是有一定的代价的。有索引的表需要更多的存储空间和内存空间以容纳表数据之外的索引页面,在操作表时,还要维护索引。聚簇索引开销更大,因为行必须以正确的顺序添加到数据页面中。
索引设计的主要建议如下
检查 WHERE子句和连接条件
使用窄索引(窄索引可以在8KB)
检查列唯一性
检查列的数据类型
考虑列顺序
考虑索引类型(非聚簇索引和聚簇索引)
聚簇索引的叶子页面和表的数据页面相同,因此,表行物理上按照聚簇索引列排序,因为表数据只能有一种物理顺序,所以一个表只能有一个聚簇索引。频繁更新的、宽的列最好不要用聚簇索引
非聚簇索引的叶子页面不仅有索引数据列还有指向该数据行的指针。
高及索引技术:覆盖索引,索引交叉,索引链接,过虑索引,索引视图,索引压缩。
当没有聚簇索引存在以建立数据的存储顺序时,存储引擎将简单地遍历整个表以查找所需要的。没有聚簇索引的表被称为堆表(Heaptable)
一个页面的空间有限,所以一行包含的列数越少,它就能保存越多的行。非聚簇索引通常不包含所表列,它一般只包含有限数量的列,因此一个页面将能包含比表行本身更多行的非聚簇索引。因此,SQLServer能够从表现一个非聚簇索引的页面中读到比从表现包含该列的表的页面上更多的值。
非聚簇索引的好处是,它有一个独立于数据表的结构,所以可以被放置在不同的文件组,使用不同的I/O路径,这意味着SQLSERVER可以并行访问索引和表,使找更快速。
索引用B-树结构存储,所以查找特定行所需要的读操作被最小化了。
索引给性能带来的好处是有一定的代价的。有索引的表需要更多的存储空间和内存空间以容纳表数据之外的索引页面,在操作表时,还要维护索引。聚簇索引开销更大,因为行必须以正确的顺序添加到数据页面中。
索引设计的主要建议如下
检查 WHERE子句和连接条件
使用窄索引(窄索引可以在8KB)
检查列唯一性
检查列的数据类型
考虑列顺序
考虑索引类型(非聚簇索引和聚簇索引)
聚簇索引的叶子页面和表的数据页面相同,因此,表行物理上按照聚簇索引列排序,因为表数据只能有一种物理顺序,所以一个表只能有一个聚簇索引。频繁更新的、宽的列最好不要用聚簇索引
非聚簇索引的叶子页面不仅有索引数据列还有指向该数据行的指针。
高及索引技术:覆盖索引,索引交叉,索引链接,过虑索引,索引视图,索引压缩。
相关文章推荐
- SQL SERVER 如何调试存储过程
- 看懂SqlServer查询计划
- oracle分页查询数据重复问题的解决
- sql 列转行
- SQL 收缩数据库
- 使用memcache(thinkphp框架学习)
- SQL语句实现不存在即插入,存在则increase某字段的功能insert into … on duplicate key update
- mysql关联更新表
- mysql如何设置主键和外键,实现级联更新、级联删除
- MySQL 添加约束,修改约束,删除约束
- ERROR 1064 (42000): You have an error in your SQL syntax; check the manual...
- MySQL管理之数据备份及恢复
- MySQL管理之数据备份及恢复 推荐
- 群发“站内信”根据不同用户量,不同的数据库设计原理
- ORACLE大表删除部分数据的最佳方案
- 被PL/SQL developer坑了
- SQL 模糊查询
- 关于MongoDB的group用法
- 怎么让oracle的异常提示为中文
- WINCE下使用SQLite数据库