题
我在互联网上发现的一些文章与Colesce进行了比较,所以我认为我的问题有些不同。
我想知道哪个更好 在性能方面?
SELECT * FROM mytable WHERE mycolumn IS NOT NULL AND mycolumn <> '';
或者
SELECT * FROM mytable WHERE COALESCE(mycolumn,'') <> '';
除了性能外,我在决定时还要考虑其他问题吗?
编辑:
我正在使用Teradata。
解决方案
此版本略带讽刺,允许(可能)使用索引
SELECT * FROM mytable WHERE mycolumn IS NOT NULL AND mycolumn <> '';
可以简化
SELECT * FROM mytable WHERE mycolumn <> '';
我之所以说“略微”和“潜在”的原因是,非平等谓词很可能意味着您无论如何都会进行全面扫描。
其他提示
您也可以考虑使用 ANSI_NULL设置. 。这将隐式地在您发出搜索参数的列上隐含过滤null值。这样做可以简化您的查询,我不确定它是否使其更快。从理论上讲,应该评估较少的滤波器参数,并且在从条款中启用完整索引选择性的地方不使用函数。例如,您可以像这样重新输入查询:
SET ANSI_NULLS ON;
SELECT * FROM mytable WHERE NOT mycolumn = '';
我希望这有帮助。
不隶属于 StackOverflow