0

我想從6表中選擇信息,我有2個選擇 第一個用WHERE語句:從WHERE或JOIN的不同表中選擇?

SELECT columns 
FROM db1, 
     db2, 
     db3, 
     db4, 
     db5, 
     db6 
WHERE db1.id = $user_id 
     OR db2.user_id = $user_id 
     OR db3.user_id = $user_id 
     OR db4.user_id = $user_id 
     OR db5.user_id = $user_id 
     OR db6.user_id = $user_id 

$user_id是php 1variable`包含user_id說明;

第二選擇連接表和一個WHERE語句: like here 哪一個是快速,有效和明確我要得到快速的結果,因爲我會做這種查詢具有非常複雜的查詢也

+3

交叉連接六個不同的表看起來像炸彈我 –

+0

我相信你實際上在這裏做一個'CROSS JOIN',至少在一些表中。這是你的意圖嗎? –

+0

它不清楚你想要什麼。你能提供樣本數據和預期結果集嗎?正如@Prdp所提到的那樣,加入六張桌子並不是個好主意。所以你可能想在這裏考慮一下你的方法。 –

回答

1

你想要什麼?要做到這一點

SELECT columns 
FROM db1 
WHERE id = $user_id 
UNION 
SELECT columns 
FROM db2 
WHERE id = $user_id 
UNION 
SELECT columns 
FROM db3 
WHERE id = $user_id 
UNION 
SELECT columns 
FROM db4 
WHERE id = $user_id 
UNION 
SELECT columns 
FROM db5 
WHERE id = $user_id 
UNION 
SELECT columns 
FROM db6 
WHERE id = $user_id 

把一個索引放在所有6個表的id列上。這將具有O(N)或更快的性能。

如果您想從多個表中獲得相同的結果(例如,請保留重複項),您也可以使用UNION ALL而不是UNION。如果可以的話,UNION ALL要快得多。

查詢你有交叉連接所有的表,並有O(N^6)的表現,因爲我敢肯定你發現了。

+0

在這種情況下UNION是否比OR快?(我對所有idis都有promary key)? 我想要設計如: 分離所有信息,因爲我想爲高流量問題實現非常快的SQL,例如名稱表(其中包含用戶的名字,姓氏user_id)或生日表(其中包含年份日月user_id)和其他人:我想分離everyhing,因爲在某些情況下,我只需要從數據庫名稱或生日或任何具體的東西得到。不是爲快速表設計?因爲我認爲連接表對sql沒有意義嗎?是不是?沉重的從聯盟的不同表中獲取數據? – John

+0

@john - 這樣做會很慢。這就是我發佈這個答案的原因。隨意再次問我 - 我仍然會給出同樣的答案。你沒有進行連接 - 連接會涉及一個'ON x = y'語句和'JOIN'關鍵字。你正在做所謂的交叉連接 - 這就是每個表中每一行的每一個組合與其他每一個表的組合。結果集將有(在db1中的#行)x(在db2中的#行)x ... x(db6中的#行) – Hogan

+0

我的sql設計很慢嗎?我只是設計它,因爲我有很多信息和事實上第一次我的設計就像一張桌子100列(llike炸彈:)),但它只是測試,很多人建議,這不是好的設計,這就是爲什麼我分開我需要分開的信息,但一些我應該將它們與UNION連接起來嗎?我應該如何在sql中設計那種信息? – John