關於SQL左鏈接效率問題

項目在開發新功能,涉及到一張表,裏面數據有一百多W的條,表字段居然有一百多個。。實在是無法再往下新增長字段了,因而就新增了一張表,用作擴展吧,經過表key來關聯。後來涉及到以擴展表中某個字段做爲查詢條件進行檢索,因而很天然就會想到經過left join新建個視圖,而後進行檢索這個視圖。但是很不幸...慢的要死,查一下要三十幾秒...sql

SELECT *
  FROM LANDREG.TDDJ_TDDJDA T
  LEFT JOIN LANDREG.TDDJ_TDDJDA_EXT E
    ON T.TDDJID = E.TDDJID

而後 explain plan一下語句,看到對兩個表都進行了全表掃描。優化

解釋一下left join大概意思: 首先取出左邊表中全部數據,而後再加上與左右兩個表匹配的的數據。 這樣一來速度天然就慢了code

因而只能拋棄這種方法。開發

優化視圖io

先找出主表中擴展表沒有的數據,而後再關聯主表與擴展表,最後經過union all將兩個查詢結果聯合起來造成一個視圖。class

SELECT T.TDDJID, '' AS FILEBARCODE
  FROM TDDJ_TDDJDA T
 WHERE NOT EXISTS
 (SELECT 1 FROM LANDREG.TDDJ_TDDJDA_EXT E WHERE E.TDDJID = T.TDDJID)
UNION ALL
SELECT T.TDDJID, E.FILEBARCODE
  FROM LANDREG.TDDJ_TDDJDA T, LANDREG.TDDJ_TDDJDA_EXT E
 WHERE T.TDDJID = E.TDDJID

這樣就避免了對主表進行了全表掃描。擴展

相關文章
相關標籤/搜索