最近刚看mysql,对于产生无重复编号算法有个想法,我用伪码表示,各位看看执行效率和空间存储效率怎么样

lxrlxr20021 2008-11-11 11:47:51
/*存储主要数据,数据量大,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)效率几乎可以忽略。整个执行是在一个事务中执行.
以上是我的个人看法,欢迎各位指正,给出更好的算法。
...全文
96 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxrlxr20021 2008-11-19
  • 打赏
  • 举报
回复
谢谢拉
懒得去死 2008-11-13
  • 打赏
  • 举报
回复
按照你的需求。你的写操作不频繁,读频繁!那这个方法可行!

现在你的性能完全是依赖表deleted_id_table。这个表不要加索引,直接用FULL TABLE SCAN.因为读需求很少!写需求很多!

56,879

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧