sql server 2005 一个索引多个字段,字段的排列顺序对搜索有啥影响??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server 2005 一个索引多个字段,字段的排列顺序对搜索有啥影响??相关的知识,希望对你有一定的参考价值。
比如有 a b 两列 ,如果 对a b同时过滤 a先过滤 b后过滤 那么 建立一个索引时 a和b哪个先后有区别吗?
建立一个索引 包括a b两列和建立两个索引分别有a 和b 有区别吗??
单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上。
用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。复合索引的创建方法与创建单一索引的方法完全一样。但复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引。当表的行数远远大于索引键的数目时,使用这种方式可以明显加快表的查询速度。
当然
(1)对一张表来说,如果有一个复合索引 on (col1,col2),就没有必要同时建立一个单索引 on col1。
(2)如果查询条件需要,可以在已有单索引 on col1的情况下,添加复合索引on (col1,col2),对于效率有一定的提高。
(3)同时建立多字段(包含5、6个字段)的复合索引没有特别多的好处,相对而言,建立多个窄字段(仅包含一个,或顶多2个字段)的索引可以达到更好的效率和灵活性。
至于先后顺序是根据数据量,
打个比方,例如你的A字段有1,2
B字段有1,2,3.。。。。。。。100
一般建立复合索引是将A字段放前面 参考技术A 理论上是没有关系的,虽然在同一个表中,既然不是同一个字段也就是说没有影响。 参考技术B 只要对a,b分别建立索引后,至于where条件后,先a或先b,没有区别追问
如果一起只建立一个索引呢?? 有什么先后有区别吗
追答一起建索引,先后也无关系
追问无关系的话,可以从哪里文章得到是确定无关系的?
追答好像是Microsoft SQL Server 2005技术内幕:查询、调整和优化或Microsoft SQL Server 2005技术内幕:T-SQL查询。其中具体哪本忘了
Sql Server 覆盖索引
覆盖索引通常都是复合索引,即索引字段为多个。创建索引时应该注意索引排列顺序。
Sql Server检索应用索引时,字段识别顺序为 从左到右。
例如如下索引的使用上
Create NONCLUSTERED Index IX_Student_Name_Class_Sex
On tb_Student(Name,Class,Sex)
Select * From tb_Student as s where s.Name=‘ws‘ //可以使用
Select * From tb_Student as s where s.Name=‘ws‘ and s.Class=1 //可以使用
Select * From tb_Student as s where s.Name=‘ws‘ and s.Class=1 and s.Sex=1 //可以使用
Select * From tb_Student as s where s.Class=1 and s.Sex=1 //不能使用所创建的索引
所以说在我们创建和使用索引的时候,要注意字段的排序顺序。
创建索引时,尽量使用不更新的字段,以避免更新时带来的非聚集索引维护成本。在编写更新语句时,尽量避免更新索引字段,
应当判断是否需要更新字段,做法就是加一个判断,这样避免相同的数据,还做更新,造成没必要的数据覆盖带来的索引维护成本。
如果说索引字段一定要频繁更新的话,那么可采用读写分离。索引照常在查询库中建立,而更新在写库中操作,避免了插入数据维护索引造成太多的等待和死锁。
以上是关于sql server 2005 一个索引多个字段,字段的排列顺序对搜索有啥影响??的主要内容,如果未能解决你的问题,请参考以下文章
我应该如何在 SQL Server 2005 中实现“自动编号”字段?
使用 INSERT INTO (SQL Server 2005) 插入多个值
如果存在可在 SQL Server 2005 和 SQL Server Compact 3.5 中使用的索引,则删除该索引的脚本