一则count(*) count(1) 为啥没有走索引的遭遇
来源:互联网 发布:mac上的邮箱怎么设置 编辑:程序博客网 时间:2024/05/22 02:19
一个超级简单的语句 select count(1) from lixora ; 开发反馈很慢,走了全表扫描,并且反馈说该表上有3个单列索引
一般就2种原因:
1.统计信息不对
2.索引列为 nullable
当时先让开发的兄弟使用 index hint 强制走了下索引,速度飞快,
然后 再select count(lixora) from lixora ,发现也是走索引;
然后看了下列属性 发现几个索引列都是 nullable 的;
到这里问题已经基本明确了,当时表的数据量有点大8000w ,和开发的兄弟交互了确定,相应索引字段实际值是不会为空的。
所以直接建议 开发 使用 select count(lixora) from lixora 替换 select count(1) from lixora
其实最好的办法是改列的属性,这样语句啥都不用动,最简单,但是这个业务环境那个表涉及的操作较多,还是不建议调整表字段了,影响太大了。
由于单列索引不存储空值,但是我们这里的业务实际数据不会存在控制,所以select count(lixora) from lixora == select count(1) from lixora 他们的结果等价的
这个问题归根结底是开发自己闹得乌龙,也就是我们常说的表结构设计不合理,最后把他们自己给坑了。。。。
阅读全文
0 0
- 一则count(*) count(1) 为啥没有走索引的遭遇
- count(*), count(1) ,count(唯一键索引),count(非唯一键索引),count(存在null索引)的效率
- count(*),count(1),count(col)的区别
- count(*) count(1) count(column)的区别
- count(*)、count(1)、count(column)的区别
- count(),count(1),count(*)
- count(*),count(1),count(id),count(rowid)的效率
- SQL里的count(*)、count(1)、count(column_name)的区别
- count(*),count(1)和count(主键)的区别
- count(*)、count(1)和count(col)的区别
- Count (*),Select Count(1),Select Count(column)的区别
- 浅析count(1) count(*) count(col)的区别和性能
- SQL Server中count(*), count(col), count(1)的对比
- SQL Server中count(*), count(col), count(1)的对比
- count(1)、count(*)与count(col)的区别
- count(*)、count(val)和count(1)的解释
- 浅析count(1) count(*) count(col)的区别和性能
- Count(*), Count(1) 和Count(字段)的区别
- 第11周项目1-图基本算法库
- sparkSQL详解
- 第十二周项目1-最小生成树的普里姆算法
- 中位数操作
- 第十周项目二C/C++用二叉树求解代数表达式
- 一则count(*) count(1) 为啥没有走索引的遭遇
- dircolors配置,linux目录颜色配置ls
- 服务的卸载
- Java并发编程之synchronized
- 第12周项目2-Kruskal算法的验证
- 第十二周 项目3-Dijkstra算法的验证
- 运行时异常一般异常的区别
- java中equals 和"=="
- 输入一个不多于5位的正整数。1、求出它是几位数;2、分别输出每一位数字;3、按逆序输出各位数字。