https://avatars.githubusercontent.com/u/6058558

程式狂想筆記

取得重覆資料最新SQL

在Backend 台灣 (Backend Tw)看到 如下 1 2 3 4 SELECT m1.* FROM messages m1 LEFT JOIN messages m2 ON (m1.name = m2.name AND m1.id < m2.id) WHERE m2.id IS NULL; 這寫法很有趣XD Triton Ho: Group by是 O(n log n) Left join 是O(n^2) George Li Chino Lin : 實際上我如果把資料降到10比左右, 這兩種query 的效能就沒有明顯差異~ http://sqlfiddle.com/#!9/296a6a/1 http://sqlfiddle.com/#!9/296a6a/2 但是筆數拉到300左右就有明顯差異了~ 所以合理判斷資料量上升~ 效能差距會越明顯~ 資料更大的話基本上沒辦法用這平台了XD Chino Lin: 我自己用一個表約100萬筆來測試 使用left join方式 跑到超過6分鐘沒等下去 , 但是用子查詢groupby 大約1秒就跑完 後來改成4萬筆left join跑了2分15才跑完 子查詢+groupby也是大約1秒就跑完 我的是mysql5.6 那我看還是用子查詢+groupby就好……. 可能是5.0太舊不值得參考了

Crontab 執行特定目錄

1
50 * * * * cd /home/me/.flexget && sh /home/me/.flexget/gitpull.sh >/dev/null 2>&1

假如前面沒有做cd動作,執行目錄不會是在相同目錄
在此筆記,以後就不用查了
直接看筆記XD

[SQL]比較null不能用等於

在 SQL 中,NULL 代表「未知」或「不存在」的值,它的行為與一般資料型別完全不同,常常是 bug 的來源。 NULL 的特殊性 NULL 不等於任何值,包括它自己 1 2 3 4 SELECT NULL = NULL; -- 結果:NULL(不是 TRUE!) SELECT NULL != NULL; -- 結果:NULL SELECT NULL = 0; -- 結果:NULL SELECT NULL = ''; -- 結果:NULL 這是因為 SQL 採用三值邏輯(Three-Valued Logic):TRUE、FALSE、NULL(UNKNOWN)。任何值與 NULL 比較,結果都是 NULL(UNKNOWN),而非 TRUE 或 FALSE。 正確用法:IS NULL 與 IS NOT NULL 1 2 3 4 5 6 7 8 9 10 11 -- ✅ 正確:查詢 email 為空的使用者 SELECT * FROM users WHERE email IS NULL; -- ✅ 正確:查詢 email 有值的使用者 SELECT * FROM users WHERE email IS NOT NULL; -- ❌ 錯誤:永遠不會回傳任何結果 SELECT * FROM users WHERE email = NULL; -- ❌ 錯誤:永遠不會回傳任何結果 SELECT * FROM users WHERE email !