select a.*,b.*
from (select * from test1) a
left jioin (select * from test2) b on b.id=a.id
a表與b表的資料量很大,查詢速度特別慢
uj5u.com熱心網友回復:
首先應考慮在 where 及 order by 涉及的列上建立索引,子查詢條件內盡量不要使用全表掃描的條件,例如不要使用!=或<>,條件不要使用or來連接等等,如果確實需要OR連接,請修改為union來連接,其實最終目的還是避免全表掃描的條件uj5u.com熱心網友回復:
建議樓主給出比較全的查詢陳述句 和 建表陳述句。先看統計資訊和執行計劃。
uj5u.com熱心網友回復:
首先,你的查詢其實可以寫成:SELECT a.*,b.*
FROM test1 a
LEFT JOIN test2 b ON b.id=a.id
其次,你使用了左外連接,而且沒有 WHERE 條件,意味著 test1 中所有的資料都會回傳,同時表很大,所以很慢。
建議業務上加一些限制條件,如果一定要查詢很多資料給前端顯示,考慮使用分頁顯示;同時確認關聯欄位(id)上創建了索引;還有,實際專案不要用 * 回傳所有欄位,只輸出你需要的資訊。
uj5u.com熱心網友回復:
如果只是連接后顯示串列的話,不應該把壓力都給資料庫的。做成分頁顯示,sql陳述句只取a表的一個頁面,然后在系結a表這頁資料時,根據ID去取b表的資料。這樣不是飛快了?uj5u.com熱心網友回復:
這是個外連接,所以連接順序已經沒法調整了,你確定這個外連接是必要的嗎?如果外連接必要的話,給出驅動表test1、test2表的資料總量,以及這個查詢最后輸出的資料量
uj5u.com熱心網友回復:
一般都不會select a.*和b.*的,select你所需的欄位就好uj5u.com熱心網友回復:
先想好到底要查詢哪些資料?兩張大表的全量查詢,查出來那么多的資料看得過來嗎?沒有任何條件?所有欄位都要查看?不太可能吧uj5u.com熱心網友回復:
可以試試用內連接查詢:select a*,b* from test a,test b where a.id=b.id 盡量不要用子查詢,影響效率。uj5u.com熱心網友回復:
6樓提到的問題也是,如果你的表的欄位太多a*,b*也會影響效率,你需要哪些欄位的值就查那幾個具體的欄位就好,不要用*uj5u.com熱心網友回復:
用視圖把兩個表查詢到視圖上,再select視圖,會很快uj5u.com熱心網友回復:
3樓說的很對,不要用子查詢, 吧on后面的2個欄位建成索引,查起來速度飛快,樓主試試uj5u.com熱心網友回復:
這是一個多表關聯的問題,試試看《如何優化JOIN性能》這篇文章能否幫到您轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/55521.html
標籤:開發
上一篇:SQL的哪種效率更高?
