我有一个关于更有效的SQL查询的问题,它将从驱动表中选择记录,这在第二个表中是缺失的。表有超过23k行,连接时间太长。
有没有办法让它更快?据我所知,以下查询遍历整个表
我用过
SELECT * FROM orders
JOIN orderID USING(Order_id)
WHERE orderID != Order_id
答案 0 :(得分:1)
您想使用left join
。它看起来像这样:
SELECT o.*
FROM orders o LEFT JOIN
SecondTable st
ON o.orderID = st.Order_id
WHERE st.Order_id IS NULL;
我发现第二个表不太可能被称为Order_id
,所以我在这个查询中称它为SecondTable
。您可能不需要不存在的记录中的列,因此我将它们限制为第一个表中的列。
答案 1 :(得分:0)
您正在生成两个表的笛卡尔积。你想要的是使用适当的where子句来定期LEFT JOIN:
SELECT * FROM orders
JOIN orderID USING(Order_id)
ON orders.orderID = orderID.Order_id
WHERE orderID.Order_id IS NULL;