快速检查SQL数据库中是否存在条目

时间:2009-10-28 08:45:50

标签: sql mysql query-optimization

Nitpicker问题:

我喜欢让函数返回一个布尔值来检查表是否有条目。我需要对此进行大量调用,因此需要进行一些优化。

现在假设mysql,但应该是相当基本的...

我应该使用

select id from table where a=b limit 1;

select count(*) as cnt from table where a=b;

或完全不同的东西?

我认为SELECT with limit应该在第一次查找后停止,count(*)需要检查所有条目。所以SELECT可能会更快。

最简单的事情是做一些循环并测试它,但我的测试没有帮助。 (我的测试系统似乎也被使用,这稀释了mny结果)

2 个答案:

答案 0 :(得分:3)

这种“需要”通常表示您尝试插入或更新的情况。最常见的两种情况是批量加载/更新行,或点击计数。

使用INSERT ... ON DUPLICATE KEY UPDATE语句可以避免首先检查行是否存在。对于点击计数器,只需要一个语句。对于批量加载,将数据加载到临时表中,然后使用临时表作为源使用INSERT ... ON DUPLICATE KEY UPDATE

但是如果你不能使用它,那么最快的方法是select id from table where a=b limit 1;force index,以确保mysql只查看索引。

答案 1 :(得分:1)

限制1将告诉MySQL在找到一行后停止搜索。如果可以有多个符合条件的行,则比count(*)快。

有更多方法可以优化它,但确切的性质取决于行数和a和b的扩展。我会使用“where a = b”方法,直到您遇到性能问题。数据库通常非常快,以至于大多数查询都没有性能问题。