在数据库查询中使用IN子句

时间:2010-06-29 10:11:15

标签: database database-design mysql

我已经编写了查询,我想知道在Query中使用IN子句的效果。

查询我 从khatapayment_track中选择* 其中Property_ID IN(从Khata_header中选择Property_id,其中DIV_ID = 2)

查询II 从khatapayment_track KPT,khata_header KH中选择* 其中kh.Property_id = KPT.Property_id和KH.DIV_Id = 2

我想知道 1)哪一个更快 2)使用IN子句的任何影响,如果查询具有3 IN子句,建议使用。

你能帮我举个例子吗

2 个答案:

答案 0 :(得分:2)

您的第二个查询速度更快,但最好使用连接(它看起来更好,并且具有相同的执行计划):

select
  *
from
  khatapayment_track t
    inner join khata_header h on (h.property_id = t.property_id)
where
  h.div_id = 2

此外,您可以使用mysql profiler来比较您的查询。

答案 1 :(得分:0)

在您的示例中查询II更快,因为您在查询I中使用子查询。 但考虑以下示例返回类似的o / p,但查询i将返回更快

select * from tableName  where id in (1,2,3,4)

类似于

select * from tableName  where id =1 OR id =2 OR id =3 Or id =4