gpt4 book ai didi

oracle - oracle select查询-多列索引

转载 作者:行者123 更新时间:2023-12-05 01:13:53 26 4
gpt4 key购买 nike

我正在处理一个sql查询,并尝试对其进行优化,因为执行时间太长。

我有几个选择和UNION之间。
每个选择都在同一张表上,但WHERE子句中的条件不同。
基本上我总是喜欢:

select * from A
where field1 <=TO_DATE ('01/01/2010', 'DD/MM/YYYY')
AND field1 >= TO_DATE(some date)
and field2 IN (...)

UNION
select * from A
where field1 <=TO_DATE ('01/01/2010', 'DD/MM/YYYY')
AND field1 >= TO_DATE(some date2)
and field2 =(...)

UNION
....


我在field1上有一个索引(它是一个日期字段,而field2是一个数字)。
现在,当我执行选择并仅放置

WHERE field1 <TO_DATE ('01/01/2010', 'DD/MM/YYYY')


它不使用索引。
我正在用Toad看清楚的解释,它说:

SELECT STAITEMENT Optimiser Mode = CHOOSE
TABLE ACCESS FULL


它是一个巨大的表,并且该列的索引在那里。

关于这个优化器有什么想法吗?为什么不使用索引?

另一个问题是,如果我在field1和field2上有where子句,我只需要创建一个索引,或者为每个字段创建一个索引?

最佳答案

如果没有Union,而是在不同的子句之间使用OR会更好吗?

select * from A
where (
field1 <"toto"
and field2 IN (...)
)
OR
(
field1 >"toto2"
and field2 IN (...)
)
OR
....


也可以在2列上建立索引。

CREATE INDEX index_name
ON A (field1, field2);

关于oracle - oracle select查询-多列索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2713438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com