看板 Database 關於我們 聯絡資訊
舉個例 index_phone(phone) select name,phone from employee where phone is null 這時候就掰掰了 會是full table scan 也許這例子不是很好,因為比數不大 如果是巨量的比數就會非常慘 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.250.60.74
swpoker:?可是index會有null就有點奇怪了? 06/20 10:17
alan3100:你在問啥? index裡本來就不存null才會走full table scan 06/20 12:01
LPH66:那又怎麼會有 where phone is null 的 query... 06/20 13:08
LPH66:或者該問為什麼會在被索引的欄位裡放 null 06/20 13:09
swpoker:樓上就是我的疑問 06/20 13:14
這就是為何主題問的要避免null值呀 問問題要盡可能描述要表達的意思 你是想問為何要query該欄位是null這種sql的出現? A:就我知道很多PG不會去避免這類事情,或是根本不知道full table scan 還是你認為可為null的欄位不能建立索引? A:可以建 還是要問當初規劃為何該欄位要設為可null又被建立index? A:當你的系統大到沒辦法考慮那麼詳細(或是根本沒考慮), 或是承接舊系統有轉檔舊資料, 或是後續調效時才增加index ※ 編輯: alan3100 來自: 111.250.94.141 (06/20 13:31)
swpoker:index會容易濫用~然後異動會導致效能~ 06/20 16:37
swpoker:以前遇到某專案會有專人在開發時會監督SQL~避免這種問題 06/20 16:37
swpoker:像現在都只能靠拜拜希望自己或有人會注意到 06/20 16:38
swpoker:遇到某專案的架構師告誡pk fk index 不能有null 06/20 16:41
swpoker:然後還會問說你建這個index要幹碼?!! 06/20 16:41
swpoker:阿~當時覺得很討厭~後來才知道這樣才是好阿 06/20 16:42
uthily:請問為什麼 where .. null 就會是 full table scan 呀? 06/21 10:49
全為null的值不會健在index內 所以如果判斷is null會變成index無法使用
uthily:假如我是資料庫軟體的設記者,既然接受可為null的欄位建索引 06/21 10:50
uthily:比如說在建立 hash table 時把 null 視為某個值就好 06/21 10:51
uthily:是有什麼我沒考慮到的限制導致不能這樣處理嗎? 06/21 10:52
資料面來講null沒有比較的意義 如果是設計者為何要把null拿來排序比較? 如果真的要拿來比較就給個初始值(就是標題所說的) 就程式面來講那麼多型態,null你要當什麼值? 但大部分的人不會很明確知道這欄位是否該nullable (根本不知道該如何規劃) 或是後來新增需求需要判斷該欄位是否沒有值就會變得很麻煩 (之前規劃沒預定) 可接受null的欄位有2個意義 一種是null本來就不該被排序比較,程式設計本來就要自己排除 另一種是複合欄位index(a,b,c),在a,b,c皆為null時不會建入index內 select a,b,c from table1 where a='a' and c='c'and b is not null <=像這種就還是可能會使用index 但是如果改成where ... and b is null --就會是full table scan ※ 編輯: alan3100 來自: 114.36.63.148 (06/21 17:55)