复合索引的第二个字段的值很少时有必要加入第二个字段吗?

[复制链接]
查看11 | 回复9 | 2009-11-30 15:55:11 | 显示全部楼层 |阅读模式
复合索引的第二个字段的值很少时有必要加入第二个字段吗?
create index TICAPP001.XTPPTR010_04 on TICAPP001.TTPPTR010 (MSG_CRTE_DTS, AREA_CD);
create index TICAPP001.XTPPTR010_05 on TICAPP001.TTPPTR010 (MSG_CRTE_DTS);
MSG_CRTE_DTS是准确到秒,而AREA_CD只有几个城市,以后可能会有20多个。
查询时用到MSG_CRTE_DTS, AREA_CD
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
如果AREA_CD的差异值很少的话,没有必要建索引,这样违背索引的创建原则.
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
创建后,可以通过v$object_usage视图查看这个索引有没有被使用,如果长时间没有使用,就可以删除了,这样比较安全
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
建立(col1,col2)的组合索引,如果col2的值种类不多,基本上可以不用包含在索引中,直接用col1建索引就可以了,2者效率相差不大(一般情况下).
但如果执行计划中可以仅扫描索引来判断条件是否满足时,2者会有较大差距.
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
明白了,谢谢各位。
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
原帖由 jlliuyi 于 2009-8-12 13:59 发表
如果AREA_CD的差异值很少的话,没有必要建索引,这样违背索引的创建原则.

今天在生产库上和开发一起试了,发现索引有AREA_CD还是更快。
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
如果第一个不同值也很少,记录又不更改,可以用位图索引
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
建议改成
create index TICAPP001.XTPPTR010_04 on TICAPP001.TTPPTR010 (AREA_CD, MSG_CRTE_DTS ) compress 1;
如果AREA_CD中有不同的值, 而且数据分布比较均匀, 在WHERE中的AREA_CD取的之是其中少数的几个或一个, , 还是会减少一致读的块数, 对性能还是有较大提升的.
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
原帖由 〇〇 于 2009-8-15 07:46 发表
如果第一个不同值也很少,记录又不更改,可以用位图索引

第一个值很多。
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
原帖由 kangoo77 于 2009-8-15 12:57 发表
建议改成
create index TICAPP001.XTPPTR010_04 on TICAPP001.TTPPTR010 (AREA_CD, MSG_CRTE_DTS ) compress 1;
如果AREA_CD中有不同的值, 而且数据分布比较均匀, 在WHERE中的AREA_CD取的之是其中少数的几个或一个, , 还是会减少一致读的块数, 对性能还是有较大提升的.

是的。不过用压缩会增加cpu成本:
http://www.freelists.org/post/or ... ession-on-Oracle-92,3
> plus there'll be obvious CPU usage because it'll need to uncompress for
> every read and compress for every write.The few GBs of storage to be saved
I wouldn't say that CPU usage increasing is so obvious. Oracle
actually doesn't do any compression
(oracle always toyed to avoid compression algorithms usage as Zip and
other classical utilities are using).
In an "Index compression" feature case Oracle avoids duplicate records
in leaf blocks. I would call the feature differently than Oracle did,
because the name doesn't reflect the meaning of functionality.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行