我在互联网上发现的一些文章与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 = '';

我希望这有帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top