ms sql 索引(一)

简介: 索引的用途 索引的主要作用就是为加快检索的速度(效率)。主要是为查询。这里的查询包括表自身的查询,还包括连接查询。此外,sql的查询优化器(隐式的)也依赖索引,如果使用索引比不使用索引时效率高,那优化器就会选择使用索引。

 

索引的用途

索引的主要作用就是为加快检索的速度(效率)。主要是为查询。这里的查询包括表自身的查询,还包括连接查询。此外,sql的查询优化器(隐式的)也依赖索引,如果使用索引比不使用索引时效率高,那优化器就会选择使用索引。

索引可能极大提高检索的速度。

例如:图书馆的图书如果无序排放,则要找《水浒传》这一本书,极有可能会把所有书都翻一遍,当然也有可能会第一本书就是它。如果给图书馆的图书按书名分列于不同书架,以字母排序,那找到S列书架,然后找Shshushui,然后找在shui书架中再找hu,然后找zhuan,那么就会找到这本书。

索引的分类

索引分聚集(聚簇)索引和非聚集(聚簇)索引。

聚集索引:表中的数据的物理顺序与排序顺序相同,表中可建立且只可建立一个聚集索引(物理顺序)。聚集索引由索引页构成,索引页底层称为叶级,上层称为非叶级。叶级存放着实际的排序的数据,非叶级存放着排序的索引。以图书馆查找《水浒传》为例的示意图:

上图是个示意图,但不表示聚集索引的正确图。索引通过B-tree算法来实现,中文的意思是平衡树,不是二叉树。

非聚集索引:不在物理顺序上排列数据,而是通过排序指针,指针指向数据。

非聚集索引也由索引页构成,索引页底层称为叶级,上层称为非叶级。叶级存放着的排序的指向实际数据的指针,非叶级存放着排序的索引。

Ms sql存储结构

Sql server在存储时,为提高数据库性能,以盘区为单位向数据库分配空间。一个盘区为8个连续的页(Page)。页是数据库存储的基本单位。页大小为8K。一个盘区为8*864K。页分为好几种页类型,例如:数据页,索引页,映射表页等。

例如:图书馆的图书以书架(页)为单位,每8个书架在一个小隔间(区)。

索引的参数

·FillFactor:设置创建索引时每个索引页的页级别中可用空间的比。用来设置索引页中预留的空间。它是填充因子,设置为100%,表示不留预留空间。对于只读表来说,可以设置为100%。设置填充因子的原因就是防止页分裂。

例如:假设图书馆的6号书架为S系统的书籍,现在摆满图书,则它的填充因子(度)为100%,那么如果图书馆新增加了一本书《三侠剑》,按索引来安排,则它应该放到6号书架,但6号书架已经满了,那么可以增加一个书架(页),这个书架可能挨着6号书架,但也有可能有一定距离,那么,在查找《三侠剑》时,就要求在两个书架中查找,可能6号书架中找不到,到新增加的那个书架去找,而这个书架离6号书架较远,影响了查找的效率。那么如果6号书架没有摆满,而是只摆了60本书(假设一本书为1%),那么填充因子(度)为60%。此时当添加《三侠剑》时,可以放到6号书架中,而不必再增加一个额外的书架。

·Pad_Index:设置创建索引时每个索引页的非页级别中的可用空间的比。它的值由FillFactor指定。

性能分析(简)

简单说明一下,详细说明在后篇说明。

·showplan_text:设置sql server不执行(onsql语句,而返回如何执行语句的详细信息。须做为单独的批处理运行,且不能用在存储过程中。与它类似的还有showplan_all,它的信息更详细。

·statistics io:显示执行sql语句的磁盘活动量。

 

 

输出项

中文输出名

含义

Table

表的名称。

Scan count

扫描计数

执行的索引或表扫描数。

logical reads

逻辑读取

从数据缓存读取的页数。

physical reads

物理读取

从磁盘读取的页数。

read-ahead reads

预读

为进行查询而放入缓存的页数。

lob logical reads

Lob逻辑读取

从数据缓存读取的 textntextimage 或大值类型 (varchar(max)nvarchar(max)varbinary(max)) 页的数目。

lob physical reads

Lob物理读取

从磁盘读取的 textntextimage 或大值类型页的数目。

Lob read-ahead reads

Lob预读

为进行查询而放入缓存的 textntextimage 或大值类型页的数目。

 

·statistics time:显示分析,编译,执行sql语句花费的时间(毫秒)。

·DBCC:全名为数据库控制台命令,即DataBase Console Command

命令类别

执行 

维护

对数据库、索引或文件组进行维护的任务。 

杂项

杂项任务,如启用跟踪标志或从内存中删除DLL

信息

收集并显示各种类型信息的任务。

验证

对数据库、表、索引、目录、文件组或数据库页的分配进行的验证操作。

 

主要介绍几个:

DBCC ShowContig:显示指定的表或视图的数据和索引的碎片信息。这个命令在高版本sql中推荐由动态管理函数sys.dm_db_index_physical_stats代替。

Dbcc showcontig(表名(id)|索引名(id)|视图名(id) with

对于with部分,常用的是tableresults,用于通过表格显示信息结果。

DBCC DbReindex:重建立索引。

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
2月前
|
SQL 存储 关系型数据库
如何巧用索引优化SQL语句性能?
本文从索引角度探讨了如何优化MySQL中的SQL语句性能。首先介绍了如何通过查看执行时间和执行计划定位慢SQL,并详细解析了EXPLAIN命令的各个字段含义。接着讲解了索引优化的关键点,包括聚簇索引、索引覆盖、联合索引及最左前缀原则等。最后,通过具体示例展示了索引如何提升查询速度,并提供了三层B+树的存储容量计算方法。通过这些技巧,可以帮助开发者有效提升数据库查询效率。
186 2
|
2月前
|
SQL Oracle 关系型数据库
SQL优化-使用联合索引和函数索引
在一次例行巡检中,发现一条使用 `to_char` 函数将日期转换为字符串的 SQL 语句 CPU 利用率很高。为了优化该语句,首先分析了 where 条件中各列的选择性,并创建了不同类型的索引,包括普通索引、函数索引和虚拟列索引。通过对比不同索引的执行计划,最终确定了使用复合索引(包含函数表达式)能够显著降低查询成本,提高执行效率。
|
3月前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
618 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
2月前
|
SQL 关系型数据库 MySQL
如何确认SQL用了索引:详细技巧与方法
在数据库管理中,索引是提高SQL查询性能的重要手段
|
3月前
|
存储 关系型数据库 MySQL
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
覆盖索引、前缀索引、索引下推、SQL优化、EXISTS 和 IN 的区分、建议COUNT(*)或COUNT(1)、建议SELECT(字段)而不是SELECT(*)、LIMIT 1 对优化的影响、多使用COMMIT、主键设计、自增主键的缺点、淘宝订单号的主键设计、MySQL 8.0改造UUID为有序
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
|
3月前
|
SQL 存储 索引
SQL Server的Descending Indexes降序索引
【9月更文挑战第21天】在SQL Server中,降序索引允许指定列的排序顺序为降序,可显著优化涉及降序排序的查询性能,特别是在复合索引中。通过创建降序索引,可以更高效地满足特定业务需求,如按交易时间降序获取最新记录。然而,使用时需考虑查询频率、数据分布及维护成本,以确保最佳性能。
|
2月前
|
SQL 存储 关系型数据库
SQL默认索引是什么:深入解析与技巧
在SQL数据库中,索引是一种用于提高查询性能的重要数据结构
|
2月前
|
SQL 存储 关系型数据库
SQL默认索引是什么
在SQL数据库中,索引是一种用于提高查询性能的数据结构
|
2月前
|
SQL 关系型数据库 MySQL
如何确认SQL用了索引
在数据库管理和优化过程中,确认SQL查询是否使用了索引是一个至关重要的步骤
|
2月前
|
SQL 关系型数据库 MySQL
如何确认SQL查询是否使用了索引:详细步骤与技巧
在数据库管理和优化中,确认SQL查询是否有效利用了索引是提升性能的关键步骤
下一篇
DataWorks