深入理解Sqlserver索引
1. Sqlserver中索引分为聚集索引和非聚集索引:
聚集索引:表中数据的物理存储的顺序与索引顺序完全相同(字典的按拼音查法),检索效率比非聚集索引高,但对数据更新影响较大。
非聚集索引:表中数据的存储和索引存储在不同的位置,索引带有指针指向数据的存储位置(字典的按偏旁部首查法),非聚集索引检索效率比聚集索引低,但对数据更新影响较小。
2. 索引的建立原则:
A.每个表中只可以创建一个聚集索引(数据库一次只能按一个规则进行排序)但最多可以创建多个非聚集索引;
B.系统一般会给主键字段自动建立聚集索引;
C.有大量重复值且经常有范围查询和排序、分组的列,或者经常频繁访问的列,或者返回大量数据记录时考虑建立聚集索引;
D.有大量非重复值或者精确匹配的查询的搜索条件(where)中经常使用的列或者返回少量数据记录时考虑建立非聚集索引;
E.在一个经常做插入操作的表中建立索引,应使用fillfactor(填充因子)来减少页分裂,同时提高并发度并降低死锁的发生。如果该表为只读表,填充因子可设为100.
F.在选择索引键时,尽可能采用小数据类型的列作为键以使每个索引页能容纳尽可能多的索引键和指针,通过这种方式,可使一个查询必需遍历的索引页面降低到最小,此外,尽可能的使用整数做为键值,因为整数的访问速度最快。
G.不要索引大型字段和小型表;
3. 索引的创建语句:
USE [CMC]
GO IF EXISTS (SELECT * FROM SYSINDEXES WHERE NAME='IX_CMC_INDEX_NAME')
BEGIN
DROP INDEX [dbo].[Products].IX_CMC_INDEX_NAME
END CREATE NONCLUSTERED INDEX IX_CMC_INDEX_NAME
ON [dbo].[Products](ID)
WITH FILLFACTOR = 100
GO --用指定的索引查询
SELECT * FROM [dbo].[Products] WITH (INDEX = IX_CMC_INDEX_NAME) WHERE ProductName = 'A'
GO
4. 深入理解(查询表中数据所在的数据页):
dbcc ind--查看数据库中数据页的的情况,--数据页默认分为表数据页和IAM数据页(索引数据页)
数据表Products:

dbcc traceon(2588)--为当前连接打开跟踪标记2588
DBCC IND (CMC,PRODUCTS,1)--DBCC IND (DB_Name,TableName,1) dbcc traceon(2588,3604)--为当前连接打开跟踪标记2588和3604
dbcc page(CMC,1,79,2)--dbcc page(CMC,IAMFID,PagePID,2)
结果预览:
深入理解Sqlserver索引的更多相关文章
- sqlserver索引小结
1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间 下面举两个简单的例子: 图书馆的例子:一个图书 ...
- SqlServer索引的原理与应用(转载)
SqlServer索引的原理与应用 索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 索引是什么:数据库中的索引类 ...
- 理解MySQL——索引与优化
转自:理解MySQL——索引与优化 写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存 ...
- SQLServer索引
SQLServer索引1.聚集和非聚集索引聚集索引:根据聚集索引进行排序,非聚集索引因为不根据索引键排序,所以聚集索引比非聚集索引快(一个表只有一个聚集索引)2.唯一索引和非唯一索引唯一索引时值不能重 ...
- mssql sqlserver 索引专题
摘要: 下文将详细讲述sql server 索引的相关知识,如下所示: 实验环境: sql server 2008 R2 sqlserver索引简介: mssql sqlsever 索引分类简介 ms ...
- sqlserver 索引的结构及其存储,索引内容
sqlserver 索引的结构及其存储,sql server索引内容 文章转载,原文地址: http://www.cnblogs.com/panchunting/p/SQLServer_IndexSt ...
- sqlserver 索引优化 CPU占用过高 执行分析 服务器检查
原文:sqlserver 索引优化 CPU占用过高 执行分析 服务器检查 1. 管理公司一台服务器,上面放的东西挺多的.有一天有个哥们告诉我现在程序卡的厉害.我给他说,是时候读点优化的书了.别一天到晚 ...
- 技术分享会(二):SQLSERVER索引介绍
SQLSERVER索引介绍 一.SQLSERVER索引类型? 1.聚集索引: 2.非聚集索引: 3.包含索引: 4.列存储索引: 5.无索引(堆表): 二.如何创建索引? 索引示例: 建表 creat ...
- sqlserver索引维护(重新组织生成索引)
sqlserver索引的维护 1:查看索引碎片大于百分三十以上的索引 select object_id= object_id,indexid = index_id,partitionnum = par ...
随机推荐
- SharePoint自动化系列——Add content type to list.
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 将创建好的content type(若是跨web application需要事先publish c ...
- 2016年11月5日 星期六 --出埃及记 Exodus 19:21
2016年11月5日 星期六 --出埃及记 Exodus 19:21 and the LORD said to him, "Go down and warn the people so th ...
- android 入门 006(sqlite增删改查)
android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite; import android.content.Context; import ...
- apache commons Java包简介
更多信息,请参考:http://commons.apache.org/ 一.Commons BeanUtils说明:针对Bean的一个工具集.由于Bean往往是有一堆get和set组成,所以BeanU ...
- 【jQuery】JS中拼接URL发送GET请求的中文、特殊符号的问题
> 参考的优秀文章 jQuery ajax - param() 方法 经常,我们需要在JS中拼接URL然后以GET形式提交请求.如果遇到中文.特殊符号则需要作各种处理. jQuery有一个方法非 ...
- 解决This function or variable may be unsafe
工程名字右键属性-->C/C++-->预处理器-->预处理器定义-->加入:_CRT_SECURE_NO_WARNINGS
- java properties读取与设值
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream; ...
- Flip Game poj1753
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 32961 Accepted: 14407 Description Fli ...
- source命令
source命令用法: source 文件名作用:在当前bash环境下读取并执行文件中的命令.注:该命令通常用命令“.”来替代.如:source .bash_rc 与 . .bash_rc 是等效的 ...
- HUD 2203 亲和串
HUD 2203 亲和串 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768K (Java/Others) [题目描述 - ...