作者wen001 (bloodsucker)
看板Database
标题Re: [讨论] 资料量大的时候要怎麽优化db & sql?
时间Sun Jan 11 23:18:42 2015
假设一个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://webptt.com/cn.aspx?n=bbs/Database/M.1420989525.A.228.html
1F:推 iamnotfat: 善用资料库的partition table可以减少disk/ index 的 01/12 17:49
2F:→ iamnotfat: overhead 01/12 17:49