gpt4 book ai didi

sql - Oracle:索引表的行的子集

转载 作者:太空狗 更新时间:2023-10-30 01:45:19 27 4
gpt4 key购买 nike

我有一个表,其中包含事件和非事件条目,active = 1 表示事件,active = 0 表示非事件。

我在这个表上有各种索引,但我只需要为事件条目维护的索引,因为应用程序只查询事件数据。非事件数据需要保留,因为它可以再次变为事件状态,但这通常只通过批量更新来完成,无论如何都不会使用索引。

我注意到索引非事件条目(事件条目越来越多)占用了相当多的空间。

在 Oracle (10g) 中有没有办法做这样的事情:

在 active = 1 的选项卡 (active, col1, col2, ... , coln) 上创建索引 an_idx?

上次尝试:

我尝试使用基于函数的索引在 active = 0 时将第一列设置为空,如下所示:

在选项卡上创建索引 an_idx (decode(active, 1, 1, null), col1, col2, ... , coln)

但在这种情况下,Oracle 似乎仍会索引非事件列。

最佳答案

您的基本想法是正确的,但您需要对所有列应用解码。只有当所有被索引的表达式都是NULL时,该行才不会被索引。

create index an_idx on tab (
decode(active, 1, col1, null),
...
decode(active, 1, coln, null)
)

当然,如果您希望查询使用此索引,它必须在 WHERE 子句中使用相同的表达式。

请注意,我认为您不想在索引中包含表达式 decode(active, 1, 1, null),因为它对于所有索引行都是常量。

关于sql - Oracle:索引表的行的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7655695/

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