WHERE子句应该注意的方面--来自以前培训资料
编程技术  /  houtizong 发布于 3年前   98
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 中把比率小的条件放前面!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接