2012-04-04 239 views
0

MySQL查询时间太长的时间给结果查询花费太长时间

Select pty_code from sis.tblBf a where a.BFno 
     not in (select b.BNo from sislatest.tbltransaction b) 

注:我比较两个不同的数据库和获得的区别。

Select A.pty_code from DataBase1.TableName A 
     where A.BFno NOT IN (SELECT B.BNo From DataBase2.TableName B) 
+1

需要很多信息。 “太久”要多久?你的表格是如何定义的?桌上有什么指数?每个表中有多少数据? – 2012-04-04 07:04:32

+1

请养成代表餐桌别名的习惯。例如。 sis.tblBf应该被别名为'bf'而不是'a',你会在6个月的时间里感谢我! – 2012-04-04 07:27:20

回答

1

使用子查询,特别是使用“not in”子句时,速度会变慢。我建议用where子句中的“is null”重写到左外连接。

SELECT a.pty_code from sis.tblBf a LEFT JOIN sislatest.tbltransaction b on b.BNo = a.BFno WHERE b.BNo IS NULL 

我认为这将工作,但没有数据库来测试,我写它盲目。

如果仍然很慢,我会看看并确保b.BNo和A.BFNo上有索引。

+0

你能解释最后一把钥匙:哪里b.BNo是空的 这实际上是什么意思? – Sensa 2012-04-04 16:19:48

+1

左连接将第一个表中的所有行组合起来,并与第二个表中的行进行匹配。如果第二个表没有任何匹配,则这些字段的值将为NULL。在SQL中,NULL不等于其他任何东西(甚至是NULL),所以你必须指定IS NULL而不是类似b.BNo = null的东西。 – 2012-04-05 04:58:14