SELECT COUNT(*)和SELECT true之间的差异在十亿行表中查找特定行

问题描述 投票:0回答:1

我有一张表可能有3-5亿行。我需要检查该表中是否有特定值,这是最快的方法吗?

SELECT COUNT(*) AS total FROM schema.table WHERE row = 'pattern';   -- Must return 1 or 0

VS

SELECT true AS is_in_table FROM schema.table WHERE row = 'pattern'   -- Must return true or no one row at all

使用适当的列索引获得“最快”结果的最佳方法是哪种?

mysql sql postgresql
1个回答
3
投票

最快的方法是在schema.table(row)上加上一个索引。

然后你可以执行:

SELECT true AS is_in_table
FROM schema.table
WHERE row = 'pattern' 
LIMIT 1;

对于这个公式,LIMIT很重要,除非你已经明确声明row是唯一的(即使那时我也不是100%确定MySQL会为查询记住这一点)。

在返回一行之前,COUNT(*)需要查找可能匹配的每个值。如果列声明为唯一,那么两个版本之间的性能应该相似。

© www.soinside.com 2019 - 2024. All rights reserved.