WHERE子句应该注意的方面--来自以前培训资料
来源:互联网 发布:问答营销软件 编辑:程序博客网 时间:2024/05/16 12:03
where子句中对列的任何操作结果都是在SQL运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表搜索
例子:
写法1:WHERE CMCC_BRANCH_CD LIKE ‘GZ%’
写法2:WHERE LEFT (CMCC_BRANCH_CD, 2) = ‘GZ’
比较:建议使用第一种写法,因为它允许使用索引。而第二种写法只能用表扫描
如下:ref.TR_CELL有主键:+LOCAL_CD+CELL_CD,以下例子如果是选count(*) 则例外。
select * from ref.TR_CELL where local_cd like ‘_57%' with ur; --没用到索引
select * from ref.TR_CELL where left(local_cd,3)=‘257’ with ur; --没用到索引
select * from ref.TR_CELL where substr(local_cd,1,3)='257' with ur; --用到索引
select * from ref.TR_CELL where local_cd like '257%' with ur; --用到索引
2.WHERE后面的条件顺序影响
WHERE子句后面的条件顺序对大数据量表的查询会产生直接的影响,如
Select * from ods.to_usr where cmcc_branch_cd= ‘GZ01' and usr_sts_cd =1
Select * from ods.to_usr where usr_sts_cd=1 'and cmcc_branch_cd= ‘GZ01’
以上两个SQL中cmcc_branch_cd及usr_sts_cd两个字段都没进行索引,所以执行的时候都是全表扫描,如果:第一条SQL的cmcc_branch_cd= ‘GZ01'条件在记录集内比率为99%,而usr_sts_cd=1的比率只为0.5%,在进行第一条SQL的时候99%条记录都进行cmcc_branch_cd及usr_sts_cd的比较,而在进行第二条SQL的时候0.5%条记录都进行cmcc_branch_cd及usr_sts_cd的比较,以此可以得出第二条SQL的CPU占用率明显比第一条低。因此where 中把比率小的条件放前面!
- WHERE子句应该注意的方面--来自以前培训资料
- where子句在编写过程中需要注意的问题
- where子句的运用
- MYSQL的WHERE子句
- where子句的使用
- MySQL的where 子句
- HAVING子句与WHERE子句的区别
- where子句与having子句的区别
- where 子句的执行顺序
- where子句的具体含义
- Hive.WHERE子句的“陷阱”
- where子句的简单实用
- 初建测试团队应该注意的几个方面
- 域AD删除后应该注意的方面
- 初建测试团队应该注意的几个方面
- WHERE 子句
- Where子句
- Where子句
- mysql锁表机制及相关优化
- PHP高效编程53个方法
- 闭包 --转载
- 索引原则-总结
- 选择不存在于另一表的数据几种写法
- WHERE子句应该注意的方面--来自以前培训资料
- adroid 笔记---入门<1>
- view布局
- 页面乱码问题根源浅析
- CPen和CBrush的使用
- 一个引号带来的悲剧,字段定义
- MySQL 优化实例---添加索引
- 慢查询
- OPTIMIZE TABLE