db2 exists 和in联合使用优化方法
来源:互联网 发布:ubuntu怎么读u盘 编辑:程序博客网 时间:2024/05/16 17:49
对于exists和in,当exists里面嵌套in的时候,如果in语句里面只有一个元素的情况下,这时候索引是有效的.如果多于一个元素,这种情况下索引会失效.下面写一个简单的例子来验证以上说法.
sql1:
select 1 from pm_measurement_recalculation reca
where
exists (
select
operating_date
from
PM_MEASUREMENT_READING reading
where
reading.measurement_id in(
-- 10000828, 10000670, 10000671,215001368
10000828,10000670,10000671
)
)
执行计划图:(索引失效)
sql2:
select 1 from pm_measurement_recalculation reca
where
exists (
select
operating_date
from
PM_MEASUREMENT_READING reading
where
reading.measurement_id in(
-- 10000828, 10000670, 10000671,215001368
10000671
)
)
执行计划图:
准备优化的原sql:
update
pm_measurement_recalculation reca
set
reca.from_operating_date=( select
min(tempTable.operating_date) as operating_date
from
( select
min(r.operating_date) as operating_date
from
pm_measurement_reading r
where
r.measurement_id in (
10000828, 10000670, 10000671, 215001368
)
group by
r.operating_date ) as tempTable )
where
reca.measurement_id in (
10000828, 10000670, 10000671,215001368
)
and
exists (
select operating_date from PM_MEASUREMENT_READING reading
where reading.measurement_id in(
10000828, 10000670, 10000671,215001368
)
)
执行计划图
优化后的sql:
update
pm_measurement_recalculation reca
set
reca.from_operating_date=( select
min(tempTable.operating_date) as operating_date
from
( select
min(r.operating_date) as operating_date
from
pm_measurement_reading r
where
r.measurement_id in (
10000828, 10000670, 10000671, 215001368
)
group by
r.operating_date ) as tempTable )
where
reca.measurement_id in (
10000828, 10000670, 10000671,215001368
)
and
exists (
select operating_date from PM_MEASUREMENT_READING reading
where reading.measurement_id in(
select
reading.measurement_id
from
PM_MEASUREMENT_READING reading
where
reading.measurement_id in(
10000828, 10000670, 10000671,215001368
)
group by reading.measurement_id
fetch first 1 rows only
)
)
执行计划图:
- db2 exists 和in联合使用优化方法
- mysql In和EXISTS优化
- exists in 联合查询
- exists和in的区别和优化
- exists和in 的使用
- in 和 exists 使用区别
- SQL优化之-In和Exists
- sql优化--in和exists效率
- sql优化 in和exists效率讨论
- sql优化--in和exists效率
- SQL优化--使用 EXISTS 代替 IN 和 inner join来选择正确的执行计划
- 比较使用 EXISTS 和 IN 的查询
- not in 和not exists的使用
- 比较使用 EXISTS 和 IN 的查询
- 使用 EXISTS 代替 IN 和 inner join
- sql优化(一)--关于exists和in的比较
- SQL优化--Exists和in的效率哪个高
- SQL优化--Exists和in的效率哪个高
- 讲话的艺术
- 位操作:十进制数转为二进制,八进制,十六进制
- printf的重定向与恢复
- 提升C语言内功的书——部分相关电子书在本人资源里
- 6配置环境参数
- db2 exists 和in联合使用优化方法
- java flash tcp字节流通信(四)-java 服务端(粘包/半包处理)
- 一个c指针问题的思考
- android SDK4.0源代码下载
- 数据统计计算的实现步骤
- datatable转json工具类
- Nand Flash原理分析与编程
- linux修改主机名的方法
- Android Dalvik虚拟机介绍