Oracle sql删除查询优化

问题描述 投票:0回答:1

我正在尝试优化具有删除功能的查询。查询包含多个条件和删除记录的组合。

 Delete from table1 where (trunc(date) ='4-Jan-2023' AND ID=12) OR (trunc(date) ='4-Jan-2023' AND ID=13) OR 
(trunc(date) ='4-Jan-2023' AND ID=12) OR 
.
.
.
.
.
(trunc(date) ='4-Jan-2023' AND ID=14);

请给我解决方案。

我想优化这个查询。

sql optimization oracle-sqldeveloper sql-delete
1个回答
0
投票

当您将

trunc
函数应用于
date
列时(这很可能不是它的真实名称,是吗?
date
是一个保留字,为数据类型名称保留),然后 - 如果该列上有索引- 它不会被使用。创建一个基于函数的索引:

create index i1_t1_datum on table1 (trunc(datum));

或切换到

where datum >= date '2023-01-04'
  and datum <  date '2023-01-05'

此外,您还强制进行数据类型隐式转换,以便将

date
数据类型值与字符串进行比较(
'4-Jan-2023'
是一个字符串)。

由于所有日期值都相同并且

ID
s 发生变化,因此将它们移动到
in
子句中。

因此,如果您对

where
子句中涉及的列进行索引,收集统计信息(关于模式;如果没有,那么 - 至少 - 在表和索引上)并使用这样的查询,它可能(或没有)帮助:

delete from table1
where datum >= date '2023-01-04'
  and datum <  date '2023-01-05'
  and id in (12, 13, 14);

考虑解释该语句,以便您了解数据库的真正作用。

© www.soinside.com 2019 - 2024. All rights reserved.