索引的问题,如果有三个字段: a,b,c 需要几种排序方式:a/b/c a/c/b b/a/c b/c/a c/a/b c/b/a,那么是否一定要建这么多的索引?

wxbfly 2003-11-13 03:28:54
假如数据量很大。

比较困惑,请各位指点,是针对每一个字段只建一个索引还是建六个复合索引?
...全文
216 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rotaxe 2003-11-13
  • 打赏
  • 举报
回复
你可以用index tuning wizard试一下
Rotaxe 2003-11-13
  • 打赏
  • 举报
回复

看你系统的要求,是分析为主还是事务处理为主。除了order by
select 和 where 里有哪些字段呢?
如果select * from table order by a,b,c 是会用表扫描,不会用你的索引的。
friendliu 2003-11-13
  • 打赏
  • 举报
回复
帮你顶
照楼主所说好像必须建好多索引才好。但这种情况下的组合太多了
个人认为不太好
还是给每个字段分别建索引好
wxbfly 2003-11-13
  • 打赏
  • 举报
回复
再顶
wxbfly 2003-11-13
  • 打赏
  • 举报
回复
还请各位继续指点,以解我疑惑。
wxbfly 2003-11-13
  • 打赏
  • 举报
回复
to pengdali(大力 V3.0) :

 有必要的,因为我们的系统有将近上百个报表,给用户提供了多种查询、打印方式。如上面我所说的发票表,其中参与索引的字段有 客户、供应商、货品、日期、发票号等。那么就可能查某个客户购买了哪个供应商的哪些货品,或者查供应商的哪个货品在什么日期卖给了什么客户,以及查属于某个客户或某个供应商的发票等。

感谢您的帮忙,我想除了建这么多的索引之外,就没有其它的办法吗?
pengdali 2003-11-13
  • 打赏
  • 举报
回复
不会综合,符合索引是对的。但你建这么多索引有必要吗
wxbfly 2003-11-13
  • 打赏
  • 举报
回复
主要是为了排序,如果只建了一个索引:a/b/c,那么在要求order by b,a,c时是否会影响效率呢?这些索引主要是用在报表输出时,客户对时间的要求也是比较高的

to zjcxc:
如果只为每一个字段建立一个索引,即建立三个索引:
1、a 2、 b 3、c

这样在order by a,b,c或其它顺序时,sql server会把三个索引综合起来使用吗?如何综合,效率如何?
zjcxc 元老 2003-11-13
  • 打赏
  • 举报
回复
我的意见
每个字段单独建立一个索引就行了.
zjcxc 元老 2003-11-13
  • 打赏
  • 举报
回复
为什么要建那么多索引?
wxbfly 2003-11-13
  • 打赏
  • 举报
回复
我以前所在的公司就是建立这么多的索引,要求有几种排列顺序,那么就建几个对应字段顺序的索引。我不知道是否还有其它的解决办法,直觉这样做不会是正确的。
wxbfly 2003-11-13
  • 打赏
  • 举报
回复
多谢各位。

这些我知道,但系统要求有不同的排序方式。

如order by a,b,c 或 order by a,c,b 或 order by b,a,c ............

那我该怎么办?是不是该建立如下的索引:
索引1: a,b,c
索引2: a,c,b
索引3: b,a,c
.
.
.

请各位指点。这种情况主要发生在比较重要的表上,如发票,可能有客户、日期、货物、发票号、供应商,等等
pengdali 2003-11-13
  • 打赏
  • 举报
回复
索引多当然好,但会影响update,而update也会影响索引
txlicenhe 2003-11-13
  • 打赏
  • 举报
回复
建这么多还了得?
三个字段一起建一个复合索引就够用了。

34,575

社区成员

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

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