假設一個table有10欄位,每個column假設100Bytes,也假設每筆ROW每個column都存滿,每筆ROW存放的就是1000Bytes。
為了方便計算我們把它假設為每筆ROW 1KBytes。
假設這個table有一百萬筆資料,整個table大小會接近 1GBytes 大小。
若沒有Index的狀況下,你的SQL Statement無論是否有 where 條件都會產生full table scan,也就是把整個table掃過一次。
select * from tableA
where ID in ('1234','2234','3234','4234')
;
執行一下以上的指令起碼要讀1GB的硬碟IO。
Index也可以把它看成是table,存放的是 ID欄位值 與 tableA 的指針。
當我再執行一次以上的指令,最慘也頂多產生index full scan,取得四個ID的指針再到tableA把四筆ROW載入到記憶體後回饋給你。
效率比沒有Index快10倍。
我想你去上一次資料庫管理的課程,對於你寫程式會有幫助,蠻多人寫SQL Statement 不會考慮資料庫效能的。