SQL Server多列索引
SQL Server多列索引
SQL Server多列索引一、在SQL Server中创建索引的语法如下(当然也可以在SQL Server 工具中设置)
CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED ]
INDEX index_name ON { table | view } ( column [ ASC | DESC ] [ ,...n ] )
[with[PAD_INDEX][[,]FILLFACTOR=fillfactor]
[[,]IGNORE_DUP_KEY]
[[,]DROP_EXISTING]
[[,]STATISTICS_NORECOMPUTE]
[[,]SORT_IN_TEMPDB]
]
[ ON filegroup ]
说明
CREATE INDEX:命令创建索引各参数说明如下:
UNIQUE:用于指定为表或视图创建唯一索引,即不允许存在索引值相同的两行。
CLUSTERED:用于指定创建的索引为聚集索引。
NONCLUSTERED:用于指定创建的索引为非聚集索引。
index_name:用于指定所创建的索引的名称。
table:用于指定创建索引的表的名称。
view:用于指定创建索引的视图的名称。
ASC|DESC:用于指定具体某个索引列的升序或降序排序方向。
Column:用于指定被索引的列。
PAD_INDEX:用于指定索引中间级中每个页(节点)上保持开放的空间。
FILLFACTOR = fillfactor:用于指定在创建索引时,每个索引页的数据占索引页大小的百分比,fillfactor的值为1到100。
IGNORE_DUP_KEY:用于控制当往包含于一个唯一聚集索引中的列中插入重复数据时SQL Server所作的反应。
DROP_EXISTING:用于指定应删除并重新创建已命名的先前存在的聚集索引或者非聚集索引。
STATISTICS_NORECOMPUTE:用于指定过期的索引统计不会自动重新计算。
SORT_IN_TEMPDB:用于指定创建索引时的中间排序结果将存储在 tempdb 数据库中。
ON filegroup:用于指定存放索引的文件组。
二、单列索引和多列索引的比较
在SQL Server中,索引分为两种,一种是单列索引,一种是多列索引。多列索引创建方法类似单列索引,只是拥有多个列
如图
三、SQL Server多列索引实例
1、假设有这样一个people表
CREATE TABLE People(
PeopleId INT NOT NULL,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
Age INT NOT NULL,
PRIMARY KEY (PeopleId)
);
2、查找姓名为MikeSullivan、年龄17岁用户的peopleid
SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan' AND age=17;
3、分析
(1)、我们可以考虑在单个列上创建索引,比如firstname、lastname或者age列。如果我们创建firstname列的索引,数据库将通过这个索引迅速把搜索范围限制到那些firstname='Mike'的记录,然后再在这个“中间结果集”上进行其他条件的搜索:它首先排除那些lastname不等于“Sullivan”的记录,然后排除那些age不等于17的记录。当记录满足所有搜索条件之后,数据库就返回最终的搜索结果。
(2)、由于建立了firstname列的索引,与执行表的完全扫描相比,SQL Server的效率提高了很多,但我们要求SQL Server扫描的记录数量仍旧远远超过了实际所需要的。虽然我们可以删除firstname列上的索引,再创建lastname或者age列的索引,但总地看来,不论在哪个列上创建索引搜索效率仍旧相似。
(3)、为了提高搜索效率,我们需要考虑运用多列索引。如果为firstname、lastname和age这三个列创建一个多列索引,数据库只需一次检索就能够找出正确的结果!
四、多列索引特性
例如我们有一个firstname、lastname、age列上的多列索引,我们称这个索引为fname_lname_age。
1、当搜索条件是以下各种列的组合时,数据库将使用fname_lname_age索引
firstname,lastname,age
firstname,lastname
firstname
SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan' AND age='17';
SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan';
SELECT peopleid FROM people WHERE firstname='Mike';
2、下面这些查询不能够使用这个fname_lname_age索引
SELECT peopleid FROM people Where lastname='Sullivan';
SELECT peopleid FROM people Where age='17';
SELECT peopleid FROM people Where lastname='Sullivan' AND age='17';
- sql server2008无法连接怎么办(SQL Server 2008 R2登录失败的解决方法)
- sqlserver自增字段(SQL Server中identity自增的用法详解)
- SQL Server数据库应用中有用的几个工具
- SQL Server中的临时表的用法
- sqlserver如何查找值为null的数据(SQL Server中NULL的正确使用与空间占用)
- SQL Server作业活动监视器
- sql server2005如何配置(SQLServer2005创建定时作业任务)
- SQL Server中GROUPING SETS
- SQL Server与Oracle数据类型的对应关系
- SQL SERVER连接池
- vs和sql安装顺序(VS2015安装之后加装Sql server2014详细步骤)
- sqlserver怎么修改表结构(SQL Server中修改“用户自定义表类型”问题的分析与方法)
- sqlserver分页数据重复(SQL Server 在分页获取数据的同时获取到总记录数)
- sql server中sleeping状态
- sqlserver两表查询语句格式(sql server实现在多个数据库间快速查询某个表信息的方法)
- 将SQL Server数据迁移到MySQL的方法
- 巴厘岛旅游攻略(巴厘岛旅游攻略7天多少钱)
- 文莱旅游攻略(文莱旅游攻略介绍)
- 马来西亚旅游攻略(马来西亚旅游攻略自由行攻略)
- 缅甸旅游攻略(缅甸旅游攻略必去景点推荐)
- 《庆余年2》新消息,原班人马,肖战特别出演,这才是最好的安排(庆余年2新消息原班人马)
- 宁夏灵武恐龙化石发现始末(宁夏灵武恐龙化石发现始末)
热门推荐
- SQL Server ltrimrtrim函数的用法(SQL Server ltrimrtrim 去不掉空格的原因分析)
- 查看docker 镜像大小(详解六种减小Docker镜像大小的方法)
- python爬百度api有次数限制吗(对python借助百度云API对评论进行观点抽取的方法详解)
- navicat如何连接sql数据库(Navicat 连接SQLServer数据库图文步骤)
- 虚拟服务器和云主机的区别(云服务器属于虚拟机么?它们有什么不同?)
- SQL中的cast()函数
- css3无缝滚动效果(CSS3 制作的图片滚动效果)
- python有什么好的微信公众号(python下载微信公众号相关文章)
- python樱花绽放代码(新年快乐! python实现绚烂的烟花绽放效果)
- python处理水印(Yii 使用intervention/image拓展实现图像处理功能)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9