iT邦幫忙

0

MySQL diff 方式

兩個不同查詢方式後的結果,例如列出多筆ID,怎麼比對出不同的ID
(如:a結果有的ID,但b結果沒有的ID)
另外問個額外的問題,查詢包多層,查詢速度會變慢嗎?

slime iT邦大師 1 級 ‧ 2019-08-11 11:42:29 檢舉
1.
select * from a
left join b on a.id = b.id
where b.id is null
2. 會
1、 B沒ID欄位,則自己弄個可供識別的唯一值欄位
SELECT ID,ADDR,TEL FROM A WHERE A.XXXXX>'2019/08/01'
UNION |
SELECT TEL+NAME AS ID,ADDR,NAME FROM B WHERE B.YYYYY > '2019/08/01'


2、常常看到同事寫程式喜歡直接join view(檢視表),搞的SQL執行效能低落,查個表要跑個十幾二十分鐘,我都會把他們的join的view改寫成Table-valued Functions,同樣的結果,速度卻只要十幾二十秒,差一大截

1 個回答

0
小魚
iT邦大師 1 級 ‧ 2019-08-11 13:06:14

1.參考slime大大 LEFT JOIN 的方式即可

2.查詢包多層是一定會變慢的,如果涉及到全表搜尋+資料量大,會變得很慢,至少是分鐘級以上的,還可能更久.
所以學資料庫第一個步驟就是要寫正確,
寫到一定程度之後就要考慮效率的問題,
這個東西就需要經驗了,
經驗足夠之後,
一開始在建表的時候就會考慮進去了,
不需要等後來才去改資料表結構.

我要發表回答

立即登入回答