gpt4 book ai didi

sql - 搜索非索引列时的查询性能

转载 作者:行者123 更新时间:2023-12-04 14:37:46 27 4
gpt4 key购买 nike

我有一个表格,我在其中搜索两个未编入索引的列中的文本,如下所示

select * from Items where items.item_label = 'Mac address' and items.item_value = '023424234324'
item_labelitem_value两者都没有索引在一起。这里 item_label 是完全可选的,我添加它以便数据库可以更快地通过标签找到项目(假设如果我缩小我正在寻找的范围它会表现得更好)

哪个查询更好,上面的还是下面的?
select * from Items where items.item_value = '023424234324'

最佳答案

我同意 Lamak 和 John 的观点,即两个查询的执行结果相同。读取数据的 I/O 时间远大于执行比较的 CPU 时间。

但是,一旦您开始将这些查询与其他数据结合起来,第二个更简单的查询的性能可能会好得多。
item_label之间存在隐含的数据相关性和 item_value .您知道 item_label谓词返回 10 行和 item_value谓词返回相同的 10 行。优化器不知道。相反,它会进行这样的计算:(low cardinality predicate) AND (low cardinality predicate) = very low cardinality results .当其他表被添加到查询时,这些错误的估计会导致错误的执行计划。

Oracle 有办法处理这个问题。如extended statistics在 11g 中,在 12c 中使用自动 SQL 指令。但如果可能的话,最好完全避免这个问题。删除冗余谓词是一件好事。不要添加逻辑上不必要的谓词,除非它专门添加了性能特性,例如分区修剪或索引访问。

关于sql - 搜索非索引列时的查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28158717/

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