----------对索引的讨论--------

tianhuo_soft 2008-08-29 09:22:01
一个表有记录70W,字段数 110,索引10个。



这几天我在研究日志问题,当 insert delete update 都要忘索引里面写东西
这样就增加了系统的开销。


首先、我要问一个表有多少个索引,才比较合适

二、索引太多会不会影响效率。

我现在去测试,大家说说经验
...全文
160 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Garnett_KG 2008-09-02
  • 打赏
  • 举报
回复

最最最关键是聚集索引要建好,要选择一个适当的字段做聚集索引.

至於说索引多了会影响新/删/修的性能,我觉得这要从两方面看

索引有助於提升定位需要新/删/修记录的位置,但同时会增加维护索引B树的成本

你的110个字段才10个索引,我觉得是少了。
xx_rj 2008-09-02
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 tianhuo_soft 的回复:]
引用 15 楼 xx_rj 的回复:
一个表里的字段110个?看一就不合理,读数据是以“页”为单位的,你应该把大对象分到其它表里。或用文件组也行。


学生言论
[/Quote]
你的并发能力越强,效率才会越高!
xx_rj 2008-09-02
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 tianhuo_soft 的回复:]
引用 15 楼 xx_rj 的回复:
一个表里的字段110个?看一就不合理,读数据是以“页”为单位的,你应该把大对象分到其它表里。或用文件组也行。


学生言论
[/Quote]
无语,那你就慢慢建索引吧,索引的建立是要根据你的业务来订的,不是建多少个合适!当你insert delete update的时候也会产生索引碎片,如果你insert delete update业务多的话,可以设置一下页的填充度
tianhuo_soft 2008-09-01
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 xx_rj 的回复:]
一个表里的字段110个?看一就不合理,读数据是以“页”为单位的,你应该把大对象分到其它表里。或用文件组也行。
[/Quote]

学生言论
xx_rj 2008-09-01
  • 打赏
  • 举报
回复
一个表里的字段110个?看一就不合理,读数据是以“页”为单位的,你应该把大对象分到其它表里。或用文件组也行。
等不到来世 2008-08-30
  • 打赏
  • 举报
回复
为什么我执行dbcc log(database,2)直接报语法错误?
comszsoft 2008-08-30
  • 打赏
  • 举报
回复
有意思,看看
tianhuo_soft 2008-08-30
  • 打赏
  • 举报
回复
我用的是2000

database 只是我数据库中的一个库名
bb3852 2008-08-30
  • 打赏
  • 举报
回复
楼住用的是什么数据库阿,
我用sql 2005
dbcc log(database,2)这句语法错误
改称dbcc log(2)没有错误
但是向表中添加数据,没有增加行数阿,不知道dbcc log(2)是不是查看日志的
有没有也用2005的阿
smart_zcg 2008-08-29
  • 打赏
  • 举报
回复
索引是用来查询滴!如果不查询就不需要索引了。
tianhuo_soft 2008-08-29
  • 打赏
  • 举报
回复
up
tianhuo_soft 2008-08-29
  • 打赏
  • 举报
回复

实验归来

首先
dbcc traceon(3604) --打开跟踪器
select * from sysfiles --找到日志id
dbcc log(database,2) --查看已有日志,在弄之前我收缩了一下日志

当前已有日志95条
我现在对该表插入一个数据
此时日志有228 条
228-95=133 该操作产生133条日志

我删除了一个索引,这个操作是日志增加到
1330 条

好 我继续插入记录后在
dbcc log(database,2) 此时有日志1362
1362-1330=32 该操作产生32条日志 -- 我日 一下少了怎么多,那多删几个岂不是更快了

在删一个索引,这个操作是日志增加到
2776 条

好 我继续插入记录后在
dbcc log(database,2) 此时有日志2776
2821-2776=45 该操作产生45条日志 -- 我日 又张上来了 o(∩_∩)o...


继续删 索引 反正有10个呢!日志增加到
4501


我继续插入记录后在
dbcc log(database,2) 此时有日志4501
4535-4501=34 --又回来了 晕了

后面的几个索引 删除后都是在30-50之间徘徊
终于我把10个全删除了
在插记录 产生58条记录
16447-16389=58

我日 又多了,而且查询变的非常慢



昵称被占用了 2008-08-29
  • 打赏
  • 举报
回复
一个表有多少个索引,才比较合适

首先要看系统类型,一般OLAP(联机分析处理系统)增删改操作很少,基本可以只要能用上的索引度可以加。OLTP(联机事务处理系统)系统也需要自己估计增删改操作的多少来决定,首先排除用不上的索引,一般一个表用得上和必要的也就3-5个索引,特殊表可以多些
(只是个人经验)

水族杰纶 2008-08-29
  • 打赏
  • 举报
回复
1:經常insert delete update 就會產生很多碎片,影響系統性能
dbcc showcontig
dbcc indexdefrag
2: 索引的多少要與系統性能有個平衡
如果修改性能遠遠大於維護的話,儘量在非必需的列上建立索引
utpcb 2008-08-29
  • 打赏
  • 举报
回复
索引多当然会影响效率! 如果你查的不多就不要建索引 如果你查的多 插入的也多 那索引要建的合适!平衡插入和查询的速度
昵称被占用了 2008-08-29
  • 打赏
  • 举报
回复
索引多的坏处:
1、insert delete update 都需要更新索引,都有额外开销
2、insert delete update 可能引起聚集索引数据的页分裂和页搬移
flairsky 2008-08-29
  • 打赏
  • 举报
回复
一个星星……

索引太多会不会影响效率

会导致索引比源表大,如果不再做增删改操作,只做查询,索引做全做大点可以

一个表有多少个索引,才比较合适

一个表基本上会有个聚集索引,可以有249个非聚集索引。
合适的话,视具体情况而定……


昵称被占用了 2008-08-29
  • 打赏
  • 举报
回复
http://blog.csdn.net/Haiwer/archive/2008/08/25/2826881.aspx
一品梅 2008-08-29
  • 打赏
  • 举报
回复
索引多和效率的关系,要看是执行读操作多,还是修改操作多.\
如果只是读记录,索引多只能提高效率.
唯一的缺点是,索引多的话,会增加空间容量.

34,872

社区成员

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

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