【关于索引和查询如何利用索引的问题】

verydxz 2008-11-13 04:31:05
其实我要问的是个一般性问题,和具体数据库没关系,看SQL Server版人多就来了 :)
我的主要问题是:如果一个查询只用了索引里的部分列,那这个索引起作用么?

假设我有一个表,如 table1(id, col1, col2)
常用的查询有两个:
1、SELECT * FROM table1 WHERE col1 ***
2、SELECT * FROM table1 WHERE col1 *** AND col2 ***

有两种索引的选择:
A、在col1和col2上分别各建一个索引
B、建一个索引包含两个列(col1, col2)


具体问题:
一、对查询1,索引A方式肯定是可行的,但如果用索引B,查询1能否用到这个索引来提速?
二、对查询2,类似的,索引A能否被利用?

当然,我想上面问题的解答可能还牵涉索引类型(常见如查找树和Hash)和查询条件(WHERE字句是=或不等约束)。
三、我虽然知道查找树、Hash等知识,但不清楚数据库里面索引到底怎么实现的。下面的一些想法请指教:
比如用Hash建索引B,是把(col1,col2)整个作为Key么?
如果是这样,那用查找树(col1, col2)整个作为值肯定没意义,那一般是A方式在两列上分别建索引对吧?
或者不是我想的这样,是其他方式?
...全文
152 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kye_jufei 2008-11-14
  • 打赏
  • 举报
回复
關注、學習、接分
-狙击手- 2008-11-13
  • 打赏
  • 举报
回复
一、对查询1,索引A方式肯定是可行的,但如果用索引B,查询1能否用到这个索引来提速?
--
能,对A用col1上的索引

二、对查询2,类似的,索引A能否被利用?
----

水族杰纶 2008-11-13
  • 打赏
  • 举报
回复
1、复合索引使用的目的是什么?   
:能形成索引覆盖,提高where语句的查询效率

2、一个复合索引是否可以代替多个单一索引?
:复合索引的使用原则是第一个条件应该是复合索引的第一列,依次类推,否则复合索引不会被使用
所以,正常情况下复合索引不能替代多个单一索引

3、在进行哪些类型的查询时,使用复合索引会比较有效?
:如果一个表中的数据在查询时有多个字段总是同时出现则这些字段就可以作为复合索引,形成索引覆盖可以提高查询的效率

4、符合索引中索引列的排序原则是什么?
:复合索引的使用原则是第一个条件应该是复合索引的第一列,依次类推

5、什么情况下不适合使用复合索引?
:建立索引的目的就是帮助查询,如果查寻用不到则索引就没有必要建立,另外如果数据表过大(5w以上)则有些字段(字符型长度超过(40))不适合作为索引,另外如果表是经常需要更新的也不适合做索引
dawugui 2008-11-13
  • 打赏
  • 举报
回复
如果对col1建立有索引,就把条件放到col1上.
如果对col2建立有索引,就把条件放到col2上.
hyde100 2008-11-13
  • 打赏
  • 举报
回复
第一反应是用:B、建一个索引包含两个列(col1, col2)
其实看到底用没用到用执行计划看一下时候用到了索引就可以了

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧