SELECT CategoryID, CategoryName
FROM testcategory
WHERE CategoryID NOT
IN (
SELECT ChildMuzeCategoryID
FROM testsubcategory
)
第一个表包含75K 二表包含45K记录是否有任何其他的方式来触发此查询
SELECT CategoryID, CategoryName
FROM testcategory
WHERE CategoryID NOT
IN (
SELECT ChildMuzeCategoryID
FROM testsubcategory
)
第一个表包含75K 二表包含45K记录是否有任何其他的方式来触发此查询
尝试使用加入:
SELECT CategoryID, CategoryName
FROM testcategory
LEFT JOIN testsubcategory ON testcategory.CategoryID = testsubcategory.ChildMuzeCategoryID
WHERE testsubcategory.ChildMuzeCategoryID IS NULL
准确! JOIN查询比IN查询执行速度快得多。 –
如果我们写'SELECT STRAIGHT_JOIN'会更快一些' [参考](http://stackoverflow.com/questions/5818837/why-does-straight-join-so-drastically-improve-this-query-and-它意味着什么) – diEcho
感谢它是前一个快,但总体上仍然缓慢..是否有任何方式通过其他一些事情处理这个脚本...我听说过Hive SQL .. –
该查询是完全没有,有没有办法重写它是实际上使其执行任何好转。
你写什么是做的最好的方式,有没有更好的办法,但我有一个建议:
由于有大量行工作时,它会更好,如果你有一些标志像testsubcategory
,并在更新testsubcategory
表时将其更新为1 (boolean)
。我们可以很容易地使用此查询:
SELECT `CategoryID`, `CategoryName` FROM `testcategory` WHERE NOT `testsubcategory` = 1;
的可能重复[SQL:“NOT IN”替代基于*不同*行的值选择行] (http://stackoverflow.com/questions/1286155/sql-not-in-alternative-for-selecting-rows-based-on-values-of-different-rows) –
安全提示:索引你的列出现在' where/ON'条件 – diEcho
旁注:阅读关于mysqli和/或PDO。 MySQL很快就会被抛弃。 – 2012-06-27 04:48:24