[quote=引用 26 楼 forgetsam 的回复:] [quote=引用 25 楼 kinlin 的回复:] 有人拿大数据作过测试吗?最好出来说说,个人感觉两者相差不大,几乎一样,没必要在这点可忽略的时间上做文章
[quote=引用 29 楼 soloopin 的回复:] [quote=引用 26 楼 forgetsam 的回复:] [quote=引用 25 楼 kinlin 的回复:] 有人拿大数据作过测试吗?最好出来说说,个人感觉两者相差不大,几乎一样,没必要在这点可忽略的时间上做文章
[quote=引用 25 楼 kinlin 的回复:] 有人拿大数据作过测试吗?最好出来说说,个人感觉两者相差不大,几乎一样,没必要在这点可忽略的时间上做文章
有人拿大数据作过测试吗?最好出来说说,个人感觉两者相差不大,几乎一样,没必要在这点可忽略的时间上做文章
COUNT(*) OR COUNT(N) 与 COUNT(ID) 首先保证正确性,其次保证效率。 正确性的优先:如果id为非空或主键,则会走索引,因为等同于条件IS NOT NULL。 效率的优先:如果LZ说的前提“不止一列”改为“只有一列”,则不会走索引,因为单行索引的BLOCK是大于单行的DATA的。其他如LS所言。
用count(*) 或 count(id)完全根据用户的需要, 性能上绝对不会有什么差异,因为Oracle对这种统计有自己的一套处理方法。 再者 用不用索引 是要看 where语句
count(*)会包含空值,而count(id)则不会。如果id有索引的话,还是用count(id)会比较快点
很多人对于这种常识性的还存在疑虑,是因为对SQL的查询优化器不够熟悉。 查询依赖于统计信息(通常是这样)以及一些基本连接,访问路径等等。 比较典型的情况COUNT(*)就是要返回所有记录,如果有索引可以用,那么oracle基本会利用索引。另COUNT(*) 和COUNT(N),n是一个常数本质上没有任何区别。 至于COUNT(COL)即某个列,着得看情况,如果COL不属于现有索引的列,那么就的全表扫描,否则就可以利用索引了。而且有一点很重要的是,COUNT(COL)中COL中有空值在回被忽略。 所以统计记录数和统计字段数是完全不同的概念,只是某些情况下会等价而已。 能利用索引,毫无疑问会更快一些,一般情况下在大表上,索引的数据量总是比表的数量来得少一些。 以上说的适合oracle10g以上。 oracle正变得越来越智能,写sql可以越来越随心所欲。
[quote=引用 6 楼 sych888 的回复:] [quote=引用 1 楼 linwaterbin 的回复:] 1) count(*) 统计所有行、很难走索引、或者走索引代价极大、CBO不会走 2)count(id)统计 id 不为 空的行、如果id列有索引、就可以走索引 综上、在满足业务的情况下、第二种好、
17,377
社区成员
95,127
社区内容
加载中
试试用AI创作助手写篇文章吧