我有一张表可能有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
使用适当的列索引获得“最快”结果的最佳方法是哪种?
最快的方法是在schema.table(row)
上加上一个索引。
然后你可以执行:
SELECT true AS is_in_table
FROM schema.table
WHERE row = 'pattern'
LIMIT 1;
对于这个公式,LIMIT
很重要,除非你已经明确声明row
是唯一的(即使那时我也不是100%确定MySQL会为查询记住这一点)。
在返回一行之前,COUNT(*)
需要查找可能匹配的每个值。如果列声明为唯一,那么两个版本之间的性能应该相似。