现在位置:
首页 > SQL Server > 正文

SQL Server中索引是什么
索引是什么
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
精简来说,索引是一种结构.在SQL Server中,索引和表(这里指的是加了聚集索引的表)的存储结构是一样的,都是B树,B树是一种用于查找的平衡多叉树.理解B树的概念如下图:
理解为什么使用B树作为索引和表(有聚集索引)的结构,首先需要理解SQL Server存储数据的原理.
在SQL SERVER中,存储的单位最小是页(PAGE),页是不可再分的。就像细胞是生物学中不可再分的,或是原子是化学中不可再分的最小单位一样.这意味着,SQL SERVER对于页的读取,要么整个读取,要么完全不读取,没有折中.
在数据库检索来说,对于磁盘IO扫描是最消耗时间的.因为磁盘扫描涉及很多物理特性,这些是相当消耗时间的。所以B树设计的初衷是为了减少对于磁盘的扫描次数。如果一个表或索引没有使用B树(对于没有聚集索引的表是使用堆heap存储),那么查找一个数据,需要在整个表包含的数据库页中全盘扫描。这无疑会大大加重IO负担.而在SQL SERVER中使用B树进行存储,则仅仅需要将B树的根节点存入内存,经过几次查找后就可以找到存放所需数据的被叶子节点包含的页!进而避免的全盘扫描从而提高了性能.
下面,通过一个例子来证明:
在SQL SERVER中,表上如果没有建立聚集索引,则是按照堆(HEAP)存放的,假设我有这样一张表:
现在这张表上没有任何索引,也就是以堆存放,我通过在其上加上聚集索引(以B树存放)来展现对IO的减少:
============ 欢迎各位老板打赏~ ===========


与本文相关的文章
- · mysql关于索引那些事儿
- · 数据库先写日志还是先写数据?
- · SQL Server数据库定时自动备份并自动删除旧的备份
- · SQL Server 字符串函数
- · 解决The underlying provider failed on Open
- · 通过VS 2015+SVN为SQL Server提供数据库版本管理
- · 通过sqlserver日志恢复误删除的数据
- · SQL Server表分区完整示例DEMO
- · sql server *= 兼容问题
- · SQL Server 中的事务与事务隔离级别以及脏读
- · SQL Server中日志的的作用
- · SQL SERVER 查询性能优化之分析事务与锁