我有一些困難來完成任務。左連接需要很長的時間在150 000行
這裏是orders
表中的一些數據:
+----+---------+
| id | bill_id |
+----+---------+
| 3 | 1 |
| 9 | 3 |
| 10 | 4 |
| 15 | 6 |
+----+---------+
這裏是從bills
表中的一些數據:
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+----+
我想列出所有bills
是有關聯的order
。
爲了實現這一目標,我認爲使用的LEFT JOIN
被挪用,所以我寫了這個請求:
SELECT * FROM bills
LEFT JOIN orders
ON bills.id = orders.bill_id
WHERE orders.bill_id IS NULL;
我還以爲我有以下結果:
+----------+-----------+----------------+
| bills.id | orders.id | orders.bill_id |
+----------+-----------+----------------+
| 2 | NULL | NULL |
| 5 | NULL | NULL |
+----------+-----------+----------------+
但是我無法完成請求,它已經運行超過5分鐘而沒有結果,我停止了請求,因爲無論如何這都不是生產時間。
我的真實數據集有超過150 000 orders
和100 000 bills
。數據集是否太大?
我的請求在某處出錯了嗎?
非常感謝您的提示!
編輯:側面說明,表中沒有定義外鍵... *飛走了*
我認爲這將是解決方案...問題是,'訂單'表實際上充滿了'bill_id' = 0,我剛剛意識到數據庫完全不健康......感謝您的迴應,但我最後用一個hacky的PHP腳本... – Hammerbot
@Gordon Linoff只是想學習...這裏使用表別名的目的是什麼?這有助於優化嗎? – watermelon
@watermelon。 。 。當查詢有多個表時,我總是使用表別名。只有一張桌子時,只能省略它們,因爲我可能很懶。 –