oracle - Oracle 10g-优化WHERE IS NOT NULL

标签 oracle optimization null

我们有Oracle 10g,我们需要查询1个表(无联接)并过滤出其中1列为空的行。当我们这样做时-WHERE OurColumn不为空-我们在非常大的表-BAD BAD BAD上进行了全表扫描。该列上有一个索引,但是在这种情况下将被忽略。有什么解决办法吗?

谢谢

最佳答案

优化器认为全表扫描会更好。

如果只有几行NULL,则说明优化程序是正确的。

如果您完全确定索引访问会更快(也就是说,使用75%的行超过col1 IS NULL行),则提示您查询:

SELECT  /*+ INDEX (t index_name_on_col1) */
        *
FROM    mytable t
WHERE   col1 IS NOT NULL


为什么75%

因为使用INDEX SCAN检索索引未涵盖的值意味着对ROWID进行了隐藏连接,其成本约为表扫描的4倍。

如果索引范围包含多于25%行,则表扫描通常会更快。

Tony Andrews所述,聚类因子是测量此值的更准确方法,但是25%仍然是一个很好的经验法则。

关于oracle - Oracle 10g-优化WHERE IS NOT NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/721556/

相关文章:

null - PHP 回显 `null` 值

SQL 连接和输出格式

c++ - 构造函数会影响性能吗?

python - 使用分组边界的 SciPy 优化

null - 什么!是指 Kotlin 的返回值?

java - 为什么 ArrayList 作为 HashMap 中的键不起作用?

oracle - PL/SQL 创建带有检查约束参数的函数

python - 如何在原始查询中将 Oracle 列安全地绑定(bind)到 ORDER BY 到 SQLAlchemy?

sql - 在oracle表中自动更改状态

mysql - 在某些情况下避免 MySQL 'using temporary'