count(*)是否能用到索引,用索引是高效还是低效
select count(*) from aa ;
首先看是否会走索引,经过试验发现,他没有走索引
它的执行计划 select statement sort aggregate table access full
别说是否高效了,他连索引都没有走,索引不能存储空记录,这样如果表的索引列有空的记录,那么依据索引来统计记录数肯定会出错。所以没有用到索引。
但是如果变一种写法,就会走索引
select count(*) from aa where id is not null;
执行计划是 select statement sortaggregate index fast full scan
显示的告诉oracle非空,它才会走索引,不然他不会冒这个险的
如果不显示的说明非空,还有什么办法让他走索引
在创建表结构的时候,将该列的属性设为非空
还有一种方法,索引列是主键列。
让他走索引一共有三种方法
一 is not null
二 表结构定义为非空
三 索引列为主键
一般在非空和字段长度很短的列建立索引
为什么走索引高效呢
因为索引只存储了索引列的值,没有存储记录的所有字段,所以索引块比数据块要小,统计就快
原文地址:http://www.cnblogs.com/zhugehome/p/3772745.html