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
这个查询非常好,没有办法重写它实际上会使其性能更好。
你写的是最好的方法,没有更好的方法,但我有一个建议:
因为在处理大量行时,如果你有一些类似的标志testsubcategory
并1 (boolean)
在更新testsubcategory
表时更新它会更好。我们可以很容易地使用这个查询:
SELECT `CategoryID`, `CategoryName` FROM `testcategory` WHERE NOT `testsubcategory` = 1;