您的位置:首页 > 数据库

数据库做什么最耗CPU资源及alter和update的区别

2006-03-23 13:48 961 查看
>>是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 时间?当然是资料表纪录重整,其次是纪录排序及搜寻,
最简单的就是只改一笔,并且能用加减乘除的数学运算找出该笔数据得位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: