首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

对于oracle组合索引的group by

2011-12-19 
关于oracle组合索引的group byoracle 9i车辆信息表clxx ,数据几百万其中两个字段:车牌号码(cphm varchar2(

关于oracle组合索引的group by
oracle 9i
车辆信息表clxx ,数据几百万
其中两个字段:车牌号码(cphm varchar2(10)), 车辆类型(cllx char(2))
建了组合索引(cphm, cllx)

SQL code
select cphm, count(*) from clxx where cphm>' ' group by cphm;select cllx, count(*) from clxx where cphm>' ' group by cllx;

两句时间接近,都是3s多些
第一句的逻辑基本清楚,cllx没有用到

但第二句为什么也能这么快-------第一问

索引改成(cllx, cphm)理论上是不是更好(上述两句group by的效率)--------第二问

[解决办法]
像这样的组合索引INDEX(cllx, cphm),CLLX被叫做引导列,只有引导列被用到,这个组合索引才会起作用,否则无效!
[解决办法]
这个应该是一样的啊!
你的WHERE 条件里用的都是CPHM这个字段!这个字段是联合索引的引导列,所以两个查询语句都用到了该联合索引!
而且两个语句返回的结果集都是达到总查询量的15%以上,所以查询速度相当也没有啥问题啊!
[解决办法]
学习

我觉得,cplx、cphm顺序的索引会更有效。
对于你的这张表,我认为创建cplx、cphm组合索引之外,还要建立cphm的单独索引。

[解决办法]
不用组合索引
 车类型相同肯定很多
[解决办法]
对于你的二个sql,都用到了where cphm>' ' ,都用到了索引,
至于速度为什么会快,你最好是在不同的会话,多次执行取平均值
[解决办法]
oracle 9i以后有组合索引有跳跃式扫描查询,所以那个字段在前在后无所谓。

热点排行