MySQL多个查询或使用IN(value1,value2,value3)

时间:2012-08-15 21:48:54

标签: mysql performance

简短介绍:

我有一个表t1( id(mediumint), string(varchar(45) )都属于主键。

我需要在这个表中找到5个字符串,比如说。这个表就像5M +行。

什么会更快?

  1. 使用IN()的一个查询:

    SELECT id, string FROM t1 WHERE string IN (value1,value2,...,value5)
    

  2. 五个查询,每个值一个:

    SELECT id, string FROM t1 WHERE string = value1
    SELECT id, string FROM t1 WHERE string = value2
    '
    '
    SELECT id, string FROM t1 WHERE string = value5
    
  3. 应用程序服务器和数据库服务器将位于同一网络(100Mbit或1Gbit,尚未确定),而不是在同一台计算机上。

3 个答案:

答案 0 :(得分:5)

大多数情况下,使用单个查询可能比使用多个查询更快,因为它避免了解析,发送查询和接收多个单独响应的开销,并且它允许更好的优化。如有疑问,请参阅。

还要记住查询的长度。大多数数据库服务器都限制了查询字符串的长度。因此,如果您有很长的值列表,则应该批量发送它们。

答案 1 :(得分:2)

使用IN()的一个查询应该更快。确保您的索引中包含“string”作为第一列。

答案 2 :(得分:1)

只有在查询中需要复杂且可能多个JOIN时,才能更快,更高效地进行多次查询,而不是从单独的表中获取单独的结果并将它们加入应用程序的内存中更好。 主要作为节省传输时间/带宽的一种方式。
每隔一次最好运行单个查询。