oracle 绑定变量简单说明2

2023年 8月 23日 53.4k 0

在WHERE条件中使用绑定变量对于性能方面的劣势是,在某些条件下会对查询优化器隐藏重要的信息。事实上,对于查询优化器而言,获取字面值比使用绑定变量更好。使用字面值时,查询优化器总能够做出最接近的估算。

 

当涉及范围比较谓词(例如基于BETWEEN、大于或小于的比较条件),检查一个值是否在可用值范围之外时(即小于列中存储的最小值或大于列中存储的最大值),或者使用直方图时,情况尤其如此。例如,拿一个1000行数据的表来说,在id列上,所有的整型值都在1(最小值)和1000(最大值)之间。

SELECT count(id),count(DISTINCT
id),min(id),max(id)FROM t;

 

当一个用户选择id小于990的所有记录时,查询优化器就知道(归功于对象统计信息)表中大约99%的数据被选中了。因此,它会选择使用全表扫描的执行计划。同时还要注意估算的基数(执行计划中的Rows列)几乎准确对应查询应返回的行数。

SELECT count(pad) FROM t WHERE idØ  is_bind_sensitive 不仅表明绑定变量扫视是否用于生成执行计划,同时也表示自适应游标共享可能会被考虑。如果是这样,此列值设置为Y,否则就设置为N。Ø  is_bind_aware 表明游标是否使用自适应游标共享。如果是,列值为Y;如果不是,则设置为N。Ø  is_shareable 表明游标是否可共享。如果可以,列设置为Y;否则,值为N。如果值为N,则游标不再被重用。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论