MySQL中連接是非常常見的操作。左連接是連接操作中的一種,它可以將兩張表進行連接,同時保留左表的所有數(shù)據(jù),如果右表中沒有匹配到左表的數(shù)據(jù),則右表的數(shù)據(jù)為NULL。當(dāng)一張表非常大而另一張表非常小的時候,我們需要進行左連接,但需要注意一些問題。
首先,當(dāng)連接小表和大表的時候,我們需要將小表放在左邊,大表放在右邊。
SELECT * FROM small_table LEFT JOIN big_table ON small_table.id=big_table.sm_id;
這是因為MySQL在執(zhí)行連接的時候需要依賴右表,當(dāng)右表非常大的時候,連接將會非常慢。但是當(dāng)我們將小表放在左邊時,MySQL可以先查找小表中匹配的數(shù)據(jù),然后再到大表中查找相應(yīng)的數(shù)據(jù),這樣可以大大加快查詢速度。
而當(dāng)我們需要查詢的數(shù)據(jù)非常龐大的時候,我們還需要加上索引,可以進一步提高查詢效率。
ALTER TABLE big_table ADD INDEX (sm_id);
這時候我們可以使用LEFT JOIN直接查詢數(shù)據(jù)。
SELECT * FROM small_table LEFT JOIN big_table ON small_table.id=big_table.sm_id;
最后,我們還需要注意內(nèi)存使用的問題。當(dāng)我們進行連接操作時,MySQL會將兩張表全部讀進內(nèi)存中進行數(shù)據(jù)操作,如果一張表非常大,可能會導(dǎo)致內(nèi)存溢出。因此我們應(yīng)該使用limit來限制每次讀取的數(shù)據(jù)量。
SELECT * FROM small_table LEFT JOIN big_table ON small_table.id=big_table.sm_id LIMIT 100000;
上一篇css畫斷行的表格
下一篇mysql左連接右表為空