看板 Database 關於我們 聯絡資訊
假設一個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 不會考慮資料庫效能的。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.166.96.99 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1420989525.A.228.html
iamnotfat: 善用資料庫的partition table可以減少disk/ index 的 01/12 17:49
iamnotfat: overhead 01/12 17:49