2012-06-27 69 views
0
SELECT CategoryID, CategoryName 
FROM testcategory 
WHERE CategoryID NOT 
IN (
    SELECT ChildMuzeCategoryID 
    FROM testsubcategory 
) 

第一个表包含75K 二表包含45K记录是否有任何其他的方式来触发此查询

+0

的可能重复[SQL:“NOT IN”替代基于*不同*行的值选择行] (http://stackoverflow.com/questions/1286155/sql-not-in-alternative-for-selecting-rows-based-on-values-of-different-rows) –

+0

安全提示:索引你的列出现在' where/ON'条件 – diEcho

+0

旁注:阅读关于mysqli和/或PDO。 MySQL很快就会被抛弃。 – 2012-06-27 04:48:24

回答

4

尝试使用加入:

SELECT CategoryID, CategoryName 
FROM testcategory 
LEFT JOIN testsubcategory ON testcategory.CategoryID = testsubcategory.ChildMuzeCategoryID 
WHERE testsubcategory.ChildMuzeCategoryID IS NULL 
+0

准确! JOIN查询比IN查询执行速度快得多。 –

+0

如果我们写'SELECT STRAIGHT_JOIN'会更快一些' [参考](http://stackoverflow.com/questions/5818837/why-does-straight-join-so-drastically-improve-this-query-and-它意味着什么) – diEcho

+0

感谢它是前一个快,但总体上仍然缓慢..是否有任何方式通过其他一些事情处理这个脚本...我听说过Hive SQL .. –

0

该查询是完全没有,有没有办法重写它是实际上使其执行任何好转。

0

你写什么是做的最好的方式,有没有更好的办法,但我有一个建议:

由于有大量行工作时,它会更好,如果你有一些标志像testsubcategory,并在更新testsubcategory表时将其更新为1 (boolean)。我们可以很容易地使用此查询:

SELECT `CategoryID`, `CategoryName` FROM `testcategory` WHERE NOT `testsubcategory` = 1; 
相关问题