作為這系列(暫時性的)最後一小節,我就將其他小知識一同彙整在這裡吧~
一般來說最簡單的方法是用 DELETE FROM <你的資料表>;
這條指令,雖然方便但是實際上效能很差、速度很慢,也容易觸發問題。相比之下,可以依序使用以下的指令去處理,整體上效能會快速很多:
ALTER TABLE <你的資料表> DROP FOREIGN KEY <外鍵>;
TRUNCATE TABLE <你的資料表>;
ALTER TABLE <你的資料表> ADD CONSTRAINT <外鍵> FOREIGN KEY (主鍵) REFERENCES <你的資料表(主鍵)>;
如此一來,在清理大數據的資料庫時會很明顯的速度提升喔。
概念上來說,只需要額外 join 自己的最新那筆資料即可。
舉例來說,如果我有甲乙兩張表,彼此用欄位 order_id 關聯,而甲裡面有個訂單編號 num 的欄位。我現在只想取甲裡面最新每個顧客最新一筆訂單,並且符合其他條件的資料。
SELECT DISTINCT 甲.order_id FROM 甲 left join (SELECT order_id, MAX(num) maxnum FROM 甲 GROUP BY order_id) 丙 on ... left join 乙... WHERE 條件…
另外,記得中間要用 Group by 統整成一筆資料喔!
這個是之前面試時碰到的問題,剛好看到網路上有各式各樣的回答,就順手整理一下答案了。
一般來說,我們寫出的 SQL 語句都沒有太大的效能差異,很多只是0.1、0.2秒的差距而已,不過如果要一直重複處理、或是真的遇到大量資料時,SQL 寫得好不好可能就真的會有幾秒鐘甚至幾分鐘的差異了,那該怎麼做呢?
除了交給 ChatGPT 幫你修改 SQL 以外,你也可以用 explain 指令去確認效能,用法也很簡單,直接在你原本的 SQL 語句前面加上 explain ,在輸出那邊就會有幾個項目顯示給你看,至於細節這邊就先不多作介紹了。
啊對了,記得我們在資料庫系列 - 2: 索引這集裡提到的,SQL搜尋時記得盡量不要用 not in 喔!這是因為用 not in 就沒有 index 的效果了喔~