catalog_product_category_bindings
的表格结构:
`productID` INTEGER UNSIGNED NOT NULL
`categoryID` INTEGER UNSIGNED NOT NULL
catalog_products
的表格结构:
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT
misc unrelated columns
任务:获取未绑定到任何类别的所有产品的数据(catalog_product_category_bindings
中没有条目)。
查询#1(使用LEFT JOIN):
SELECT cp.* FROM catalog_products AS cp
LEFT JOIN catalog_product_category_bindings AS cpcb
ON cp.id = cpcb.productID
WHERE cpcb.categoryID IS NULL
查询#2(使用嵌套选择):
SELECT cp.* FROM catalog_products AS cp
WHERE id NOT IN
(SELECT productID FROM catalog_product_category_bindings)
这两个查询在我的表格上的速度似乎非常相似(我没有太多内容),但我相信第二个查询的性能更差,因为它可能会遍历每个id
catalog_products
表格,并将其与productID
的每个catalog_product_category_bindings
进行比较。更不用说它可能不会返回任何内容并完全破坏查询(尽管只有在表被截断时才会发生这种情况。)
你会说哪个更好?我个人更喜欢#1,因为它更适合我的查询构建器,看起来通常更好。