我有一张只有一列和600万行的表。每行包含一个用PHP加密的字符串(每个字符串约32个字符)。
我有一个简单的SELECT查询,用于验证输入(如果插入的代码(通过HTML表单)存在于数据库中,则将其插入(插入另一个表中)。
SELECT 1 FROM codes WHERE code = $value
它运行良好,但是有600万行,验证需要10到15秒。有一些通用的方法吗?
答案 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毫秒以下响应,我建议使用内存缓存