复合索引,字段建立顺序。

wgybb 2008-03-31 10:59:55
有个表InfoMsg(ID[PK],tblName,InfoID,Title,Content,.....)
现在想在tblName和InfoID这两个字段上面建立一个复合索引。
tblName这个字段的值重复率比较高。
InfoID这个字段的值重复率相对tblName它来说比较低一些。

试问建立复合索引时候,用下面哪种方法会更好一些。
A:create index IX_tbl_info on infoMsg(tblName,InfoID)
B:create index IX_tbl_info on infoMsg(InfoID,tblName)


...全文
420 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenkaishun 2008-09-03
  • 打赏
  • 举报
回复
A:create index IX_tbl_info on infoMsg(tblName,InfoID)
B:create index IX_tbl_info on infoMsg(InfoID,tblName)
两个索引都用,sql会自动根据where条件选择最优。
wgybb 2008-03-31
  • 打赏
  • 举报
回复
查询语句,肯定会和建索引的顺序保持一致的。

现在的问题是上面两个有区别吗,我搞不懂。
wangxuelid 2008-03-31
  • 打赏
  • 举报
回复

'应该有一些关系,如果哪个A更好一些,关键你怎么关联或查询'
wangxuelid 2008-03-31
  • 打赏
  • 举报
回复

'学习'
ojuju10 2008-03-31
  • 打赏
  • 举报
回复
一样的,没有什么区别
qsqtok 2008-03-31
  • 打赏
  • 举报
回复
这2个索引应该是一样的吧 只是顺序不通而已:注意的是查询的时候字段顺序跟索引一致


顶2楼 2005顺序颠倒了也能用到索引 学习了
viva369 2008-03-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wzy_love_sly 的回复:]
刚测试

05颠倒顺序也还可以用到索引.....
[/Quote]

2000没那么笨吧
wlinglong 2008-03-31
  • 打赏
  • 举报
回复
感觉B的方法应该比A 好
-狙击手- 2008-03-31
  • 打赏
  • 举报
回复
得根据 你的查询语句来定
dawugui 2008-03-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 wgybb 的帖子:]
有个表InfoMsg(ID[PK],tblName,InfoID,Title,Content,.....)
现在想在tblName和InfoID这两个字段上面建立一个复合索引。
tblName这个字段的值重复率比较高。
InfoID这个字段的值重复率相对tblName它来说比较低一些。

试问建立复合索引时候,用下面哪种方法会更好一些。
A:create index IX_tbl_info on infoMsg(tblName,InfoID)
B:create index IX_tbl_info on infoMsg(InfoID,tblName)
[/Quote]
貌似一样.
areswang 2008-03-31
  • 打赏
  • 举报
回复
索引列排序跟WHERE条件列一致
wzy_love_sly 2008-03-31
  • 打赏
  • 举报
回复
刚测试

05颠倒顺序也还可以用到索引.....
wzy_love_sly 2008-03-31
  • 打赏
  • 举报
回复
复合索引
infoMsg(tblName,InfoID)

select * from tb where tblName='a' and infoid='b'用索引
select * from tb where infoid='b' and tblName='a'不用索引
flairsky 2008-03-31
  • 打赏
  • 举报
回复
我觉得是一样的阿,如果你查询顺序和索引一样

这种问题最好就用“查询命中率”来考虑。命中几率越大越好。
你这个不管怎么查,都是x*y的命中率,前提:查询顺序和索引一样
nextflying 2008-03-31
  • 打赏
  • 举报
回复
a
hui_hui_2007 2008-03-31
  • 打赏
  • 举报
回复
mark
viva369 2008-03-31
  • 打赏
  • 举报
回复
如果查询条件中2列都包含则没区别.优化器会自动优化
如果查询条件中只有其中1列的话那就必须是定义在前面的列,不然的话该索引是无效的

--你可以测试下,看执行的是index seek 还是index scan

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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