>>是update 吗
>>又alter 跟update 有何不同呢
update 是否耗时和数据结构的组成有密切关系,最有效率的是那种
每笔纪录都有固定栏数栏宽的资料表结构,那么 update 和 new
的速度差不多,new 是直接摆在资料表最尾端,update 则是算出
该笔纪录在档案的位置,把资料置换过来。
但如果数据结构是那种分隔符式的纯文字资料表,由于他每笔纪录
不一定同栏数,每栏宽度也不固定,也就是每笔纪录的长度不一,你要
换算某笔资料在档案的位置就要麻烦了,况且你要 update 的那笔资料
不见得宽度刚好适合摆得下。
所以每笔纪录固定长度的资料表,update 只需更改一笔纪录,但对
分隔符式资料表而言,update 却必须把整个资料表所有纪录从头到
尾重排一遍。
> ALTER 指的是修改已建立 table 的结构 (schema)
alter 必须重排整个资料表纪录。
> UPDATE 指的是更新 table 中已建立的资料
要补充说的是 delete 和 insert 的动作,delete 在资料表
处理的合理作法上,并不是真把该纪录删去,然后把所有后面的纪录
往前移,因为你不知道该纪录后面是否有成千上万笔纪录要一一前挪的。
它只是把该纪录前面做个删除注记,系统读到他就知道是个已删除的纪录
,而不处理。
至于 insert ,严格说来数据库根本不会做这种插入动作,因为每插
一笔,整个后面纪录就要重挪一遍。如果你的数据库软件可以给你
insert 纪录,那只不过是结合 new 和 resort 之后的障眼法而已。
从这里就可看出,一个资料表经过一段时间的 update,delete,new,
insert 之后,一定排序前后颠到,废纪录注记一堆,效率也愈来愈差,
这时就要整理重建资料表。这没什么大学问,就是先把原资料表 sort
一遍,然后按 sort 过后的次序,一笔笔纪录 copy 到新的资料表,
并丢弃那些有废除注记的纪录,完毕后,再把那新资料 recover 回
来,盖掉旧资料表。
所以什么最花 cpu 时间?当然是资料表纪录重整,其次是纪录排序及搜寻,
最简单的就是只改一笔,并且能用加减乘除的数学运算找出该笔数据得位置。