lxrlxr20021 2008年11月11日
最近刚看mysql,对于产生无重复编号算法有个想法,我用伪码表示,各位看看执行效率和空间存储效率怎么样
/*存储主要数据,数据量大,id为主键*/
/*表以检索为主,数据插入不频繁,删除不频繁*/
create table main_table
(
id int(10) zerofill not null auto_increment primary key,
name varchar(50) default ''
);

/*存储被删除数据id*/
create table deleted_id_table
(
id int(10) zerofill not null primary key
);

数据:
id name
1 ...
2 ...
3 ...
........

场景:
默认情况下,main_table的id是一直递增的,即使删除id=2的数据,insert(null,'data')还是按递增进行,这样之前被删除数据的id不能利用,所以我想获得一个产生随机id,不产生冗余,高效的算法.id不超出最大值
我的算法:
1.delete main_table数据
当删除id = 2的数据,id=2 insert into deleted_id_table
2.insert main_table数据
检索deleted_id_table信息
if (count(deleted_id_table) > 0)
{
取deleted_id_table.top=1的数据id作为inert into values(id,'data');
delete from deleted_id_table where id='2';
}
else
insert(null, 'data');
注:我个人认为,增加deleted_id_table存储被删除数据,不会增加太大存储开销,只是数据从main_table转移到delete main_table而已。因为表是检索为主,deleted_id_table数据不会太大,main_table一执行insert操作,deleted_id_table数据的数据就被删除.count(deleted_id_table)效率几乎可以忽略。整个执行是在一个事务中执行.
以上是我的个人看法,欢迎各位指正,给出更好的算法。
...全文
46 点赞 收藏 2
写回复
2 条回复

还没有回复,快来抢沙发~

发动态
发帖子
MySQL
创建于2007-09-28

2.4w+

社区成员

5.5w+

社区内容

MySQL相关内容讨论专区
社区公告
暂无公告