数据库做什么最耗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 时间?当然是资料表纪录重整,其次是纪录排序及搜寻,
最简单的就是只改一笔,并且能用加减乘除的数学运算找出该笔数据得位置。
>>又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 时间?当然是资料表纪录重整,其次是纪录排序及搜寻,
最简单的就是只改一笔,并且能用加减乘除的数学运算找出该笔数据得位置。
相关文章推荐
- MySQL 数据库 alter 和 update 的区别
- 数据库update和alter之间的区别
- 在数据库的SQL语句中update与alter的区别
- Visual Studio 中的头文件、源文件和资源文件都是什么?有什么区别??
- 数据库 for update of 和 for update区别。
- 数据库连接字符串有什么区别?
- hibernate之saveorupdate()、save()、update()都有什么区别
- 数据库与数据仓库的区别是什么
- for update 和 for update of 有什么区别
- hibernate save,update,saveorupdate方法有什么区别
- smdk2410_iodesc中定义的io资源和smdk2410_devices中有什么区别么?
- 数据库里的存储过程和事务有什么区别?
- WEB应用防火墙与数据库应用防火墙有什么区别
- hibernate之saveorupdate()、save()、update()都有什么区别
- Mysql 中不commit也可以改变数据库吧,那么写不写commit命令有什么区别呢?
- 在 rest 风格 url 资源中, GET/POST/PUT/DELETE 等方法各有什么作用与区别?
- 独立显卡、集成显卡和CPU核心显卡有什么区别?
- 数据库 for update of 和 for update区别。
- hibernate之saveorupdate()、save()、update()都有什么区别
- SqlServer优化:当数据量查询不是特别多,但数据库服务器的CPU资源一直100%时,如何优化?