我注意到跑步
select * from cdr_data where rownum < 10 and customer_tag = ''
明显快于
select * from cdr_data where rownum < 10 and customer_tag = 'a'
可能是什么原因?
编辑:使用Oracle 11g。没有条目,其中customer_tag的数据为“ a”。只是要清楚。我正在使用公司工具进行这些查询。
答案 0 :(得分:1)
以下是Oracle文档(https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements005.htm)的引文:
注意:Oracle数据库当前处理具有长度的字符值 零为null。但是,将来可能不会一直如此 版本,并且Oracle建议您不要对待空字符串 与null相同。
您对以下内容的查询:
从cdr_data中选择*,其中rownum <10并且customer_tag =''
等效于:
从cdr_data中选择*,其中rownum <10,customer_tag为空
一个可能的解释:也许Oracle可以比比较两个字符串更快地进行is null
比较。