update 与 删除 插入的性能问题

baggio1984 2011-08-22 10:27:09
innodb的表,记录会过百万或千万,表上有索引,需要对表进行频繁的更新 怎么做效率高?


create table t_user
(
kid bigint not null auto_increment,
user_id bigint not null,
user_xx int not null,
user_yy int not null,
isvalid int not null,
primary key(kid)
)engine = innodb;
create index index_user on t_user(user_id);

每个user_id 对应 几十条记录 主键不一定连续 每次更新的记录数和更新的字段都有变化

下面两个效率有区别吗。。。 本来我以为直接更新的会效率高 觉得没有索引的重建,但用十万左右的记录 更新 随机和连续的 几千条记录 感觉没啥大的差别 这是为啥。。。。。

1. 先删再插
delete from t_user where user_id = xxx;
insert into t_user() values();

2.先置为无效再更新
update set isvalid = 0 where user_id = xxx;
存储过程
procedure
select user_id to temp_id from t_user where user_id = xxx;
if temp_id = xxx then
update ....
else
insert ...




...全文
436 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicenight 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 baggio1984 的回复:]

晕 忘了给nicenight 分。。。
[/Quote]

不用这么机械嘛……本着交流的目的来
ACMAIN_CHM 2011-08-24
  • 打赏
  • 举报
回复
至于哪个快,则需要测试一下然后总结了。至于如何设计测试方法,则可以参考下贴。

http://blog.csdn.net/acmain_chm/article/details/4192311
ACCESS的真假:一、DROP删除表再重建比Delete from Table1快吗?

http://blog.csdn.net/acmain_chm/article/details/4210633
ACCESS的真假:二、检查记录有无再insert 或 update 比 不管有无直接 delete 再 insert 快吗?

ACMAIN_CHM 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 baggio1984 的回复:]
感谢 1楼的回复 能告诉下为什么没区别吗 总感觉delete/insert需要更多的磁盘读写呢 难道是由于两次写 写磁盘的延迟 使得没了影响?
[/Quote]数据库不会立即写磁盘的,而在更新在内在的磁盘缓冲区内。


这方面的内容请参考高校的教材《数据库系统概论》萨师宣
baggio1984 2011-08-24
  • 打赏
  • 举报
回复
晕 忘了给nicenight 分。。。
baggio1984 2011-08-24
  • 打赏
  • 举报
回复
感谢各位的解答 加分 结贴。。。
rucypli 2011-08-23
  • 打赏
  • 举报
回复
数据库实现原理
baggio1984 2011-08-23
  • 打赏
  • 举报
回复
感谢解答 还想问下 这些知识哪本书上有介绍 想学习下
nicenight 2011-08-23
  • 打赏
  • 举报
回复
1. 如果未使用独立空间的 innodb 引擎的话,先删再插是没有必要的,因为innodb mysql的删除其实只是对数据进行一个“标记”,表示这条删除的数据是无用的,之后如果有新数据需要插入,会找到适合大小的标记为无效的空间插入
2. 看你根据主键来判断是更新还是插入,建议直接使用 replace into 来处理吧,数据库自动支持的功能内部实现应该效率更高些
李超 2011-08-22
  • 打赏
  • 举报
回复
学习了
baggio1984 2011-08-22
  • 打赏
  • 举报
回复
感谢 1楼的回复 能告诉下为什么没区别吗 总感觉delete/insert需要更多的磁盘读写呢 难道是由于两次写 写磁盘的延迟 使得没了影响?
rucypli 2011-08-22
  • 打赏
  • 举报
回复
没啥区别

56,673

社区成员

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

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