你的目的是要在排序状态下在指定位置处插入一条记录,除非你先物理排序然后关闭索引再insert before,否则insert before之后必定因索引关键字段为空而被重新排序,而关闭索引的插入,也是通过物理挪动记录实现的。举个例子,你有111222333这样9条记录,要在222的第2个2处插入一笔2,把记录指针定位到现在看起来正确的位置,然后关闭索引insert before,那么错误就跟着来了,这个时候这条记录的before未必是你当时看到的那样在222的第2个2的前面!
解决的办法是不能关掉索引,必须保持排序状态。直接append blank在最末尾加一条空记录,然后把它的索引关键字段写成2,那么这条新记录就会成为原先222后面的第4个2,即2222,最后一条是空记录,然后把原先的222中的后两个22依次抄到后面,即顺序下移一位,把需要的那个位置空出来,然后填写数据。这个操作,实际只挪动了2条记录的数据,比关闭索引后insert before所挪动的记录数往往少得多(那个在正确顺序态下是挪动了5条记录,多了后面的3个3)。程序代码是多的,但操作会比那个快,而且保证不会出错。
为什么SQL的insert before会快呢?就是因为它带索引的,原理就是如上所说那样,挪动的数据少了,当然快了。SQL的很多指令,都要对带索引的表操作才快,道理也在这里。
[
本帖最后由 TonyDeng 于 2012-12-27 19:44 编辑 ]