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 Server2005数据库怎么查看视图里的字段。

我应该如何在 SQL Server 2005 中实现“自动编号”字段?

使用 INSERT INTO (SQL Server 2005) 插入多个值

SQL Server 2005 标量 UDF 性能

如果存在可在 SQL Server 2005 和 SQL Server Compact 3.5 中使用的索引,则删除该索引的脚本

移动/复制 SQL Server 2005 全文索引