加速具有600万行的表的SQL SELECT查询

时间:2019-01-07 14:55:31

标签: sql performance select

我有一张只有一列和600万行的表。每行包含一个用PHP加密的字符串(每个字符串约32个字符)。

我有一个简单的SELECT查询,用于验证输入(如果插入的代码(通过HTML表单)存在于数据库中,则将其插入(插入另一个表中)。

SELECT 1 FROM codes WHERE code = $value

它运行良好,但是有600万行,验证需要10到15秒。有一些通用的方法吗?

3 个答案:

答案 0 :(得分:2)

如果您有适当的索引,这应该会更快:

create index idx_codes_code on codes(code)

如果您有索引,则问题可能是返回的行数。在这种情况下,您可以将结果集限制为一行。您没有指定数据库。标准语法为:

SELECT 1
FROM codes
WHERE code = $value
FETCH FIRST 1 ROW ONLY;

在某些数据库中,这可以通过SELECT TOP (1)LIMIT 1处理。

答案 1 :(得分:0)

如果您想知道是否存在某些东西,请考虑使用EXISTS:

SELECT 1
WHERE EXISTS 
(SELECT 1 FROM code WHERE code = $value)

找到1条记录后返回。

答案 2 :(得分:0)

索引将解决此问题。 但是,如果您想在200毫秒以下响应,我建议使用内存缓存