首页 > 代码库 > count(*)
count(*)
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
二 表结构定义为非空
三 索引列为主键
一般在非空和字段长度很短的列建立索引
为什么走索引高效呢
因为索引只存储了索引列的值,没有存储记录的所有字段,所以索引块比数据块要小,统计就快
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。