如何有效地检查sql查询是否存在记录?

时间:2012-01-17 02:23:45

标签: mysql sql ruby-on-rails activerecord

用户场景如下。

我的申请有公司名单。每家公司都有一个唯一的号码(电话号码)。

使用谷歌的API服务,该应用程序可以获取本已注册到我的应用程序或未注册到我的应用程序的公司。

因此,从API调用中,我想通过从我的应用程序中搜索电话号码来删除已经注册的公司。 API调用的结果将小于20。

  1. 最不太考虑的方法是通过迭代API结果来检查具有电话号码的记录是否存在,这将花费O(n)sql查询。 (我不确定如果索引电话号码列并且n小于或等于20)这是否无关紧要

  2. 使用nor次比较的单个查询,从API结果中获取任意一个电话号码的公司,并通过迭代“过滤掉”查询结果。

  3. 您是否认为第二种方法最终必须在“过滤”过程中最坏情况下比较O(n ^ 2)次?

    解决此问题的最佳做法是什么?

    我正在使用Ruby on Rails 3& ActiveRecord与MySQL。

1 个答案:

答案 0 :(得分:1)

如果您使用field IN (n1, n2, n3)并且field被索引覆盖 - 那么您将获得O(lgN)复杂度,并且M * O(lgN)位于第一个(实际上M没有任何意义,只要你说只有不到20个元素)