WHERE子句应该注意的方面--来自以前培训资料

2024-02-26 11:58

本文主要是介绍WHERE子句应该注意的方面--来自以前培训资料,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 中把比率小的条件放前面!

 

可利用索引的谓词:
PREDICATE TYPE
INDEXABLE
STAGE 1
INDEXABLE
COL = value
Y
Y
COL = noncol expr
Y
Y
COL IS NULL
Y
Y
COL op value
Y
Y
COL op noncol expr
Y
Y
COL BETWEEN value1 AND value2
Y
Y
COL BETWEEN noncol expr1 AND noncol expr2
Y
Y
COL LIKE 'pattern' (pattern 是 xxx%)
Y
Y
COL IN (list)
Y
Y
COL LIKE host variable
Y
Y
T1.COL = T2.COL
Y
Y
T1.COL op T2.COL
Y
Y
COL = (non subq)
Y
Y
COL op ANY(non subq)
Y
Y
COL op ALL(non subq)
Y
Y
COL IN (non subq)
Y
Y
COL = expression
Y
Y
(COL1, COLn) IN (non subq)
Y
Y
不可利用索引的谓词:
PREDICATE TYPE
INDEXABLE
STAGE 1
NON-INDEXABLE
COL <> value
N
Y
COL <> noncol expr
N
Y
COL IS NOT NULL
N
Y
COL NOT BETWEEN value1 AND value2
N
Y
COL NOT BETWEEN noncol expr1 AND noncol expr2
N
Y
COL NOT IN(list)
N
Y
COL NOT LIKE 'char'
N
Y
COL LIKE '%char'
N
Y
COL LIKE '_char'
N
Y
T1.COL <> T2.COL
N
Y
T1.COL1 = T1.COL2
N
Y
COL <> (non subq)
N
Y

 

这篇关于WHERE子句应该注意的方面--来自以前培训资料的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/748810

相关文章

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

SpringMVC入参绑定特别注意

1.直接在controller中定义一个变量,但是此种传输方式有一个限制就是参数名和请求中的参数名必须保持一致,否则失效。 @RequestMapping("test2")@ResponseBodypublic DBHackResponse<UserInfoVo> test2(String id , String name){UserInfoVo userInfoVo = new UserInf

编程应该用 Mac 还是 PC ?

『有人的地方,就有江湖』—徐克。笑傲江湖。     序     一个竞争的市场,就会有对立的产生,这世界存在著很多不同的领域,领域好比是个江湖的缩影,因此就有许多门派的纷争,例如说浏览器领域有著最大宗的IE派,门派成长速度飞快,武功版号跳的跟台湾物价指数一样快的Chrome门,不断被模仿,一直被超越的Opera派;韧性极强,一直对抗几大势力的Firefox派等等,程序语言也有自己的领域

argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常

一、问题描述 一位同学反馈,他写的argo存过中调用了一个自定义函数,函数会加载hdfs上的一个文件,但有些节点会报FileSystem closed异常,同时有时任务会成功,有时会失败。 二、问题分析 argodb的计算引擎是基于spark的定制化引擎,对于自定义函数的调用跟hive on spark的是一致的。udf要通过反射生成实例,然后迭代调用evaluate。通过代码分析,udf在

智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1

Q1、昨天分别给出了三个智能工厂的 “面face”(里面inter-face,外面outer-face和表面surface) 以及每个“面face” 各自使用的“方”(StringProcessor,CaseFilter和ModeAdapter)  。今天我们将继续说说三个智能工厂的“方面” 。在展开之前先看一下三个单词:面向facing,取向oriented,朝向toword。理解这三个词 和

js基础需要注意的点

1 js中单引号和双引号都能创建字符串,但是html的元素属性规定必须用双引号,所以js优先用单引号定义字符串。

用ajax json给后台action传数据要注意的问题

必须要有get和set方法   1 action中定义bean变量,注意写get和set方法 2 js中写ajax方法,传json类型数据 3 配置action在struts2中

平时工作学习重要注意的问题

总体原则:抓住重点,条理清晰,可回溯,过程都清楚。 1 要有问题跟踪表,有什么问题,怎么解决的,解决方案。 2 要有常用操作的手册,比如怎么连sqlplus,一些常用的信息,保存好,备查。

html方面笔记

title和alt区别:title是鼠标放在对象上显示提示信息,alt是在image不能正常显示的时候显示的文字,即替换图片的文字;有的浏览器貌似把二者搞混淆了。