kfo*_*eck 42 mysql sql database replace
我希望能够使用"替换为"语句更新相同模式的表.最后,我需要能够使用可能已更改的值更新大型表.
这是我用来开始的查询:
REPLACE INTO table_name
(visual, inspection_status, inspector_name, gelpak_name, gelpak_location),
VALUES (3, 'Partially Inspected', 'Me', 'GP1234', 'A01');
Run Code Online (Sandbox Code Playgroud)
我不明白的是数据库引擎如何知道什么是重复行而哪些不是?这些数据非常重要,我不能冒数据被破坏的风险.它是否像"如果列出的所有列具有相同的值,它是重复的行"一样简单?
我只是想弄清楚这样做的有效方法,所以我可以在一分钟内更新> 45,000行.
And*_*unn 16
REPLACE确实工作就像INSERT覆盖具有相同PRIMARY KEY或UNIQUE索引的记录一样,但要注意.
Shlomi Noach REPLACE INTO 在这里使用时写到了这个问题:
但是像我一样的弱心人应该意识到以下几点:这是一个重量级的解决方案.它可能正是您在易用性方面所寻求的,但事实是在重复键上执行DELETE和INSERT,这需要仔细研究.
每当删除一行时,所有索引都需要更新,最重要的是PRIMARY KEY.插入新行时,会发生同样的情况.特别是在InnoDB表上(由于它们的集群特性),这意味着很多开销.指数的重组是一项昂贵的操作.可能需要在DELETE时合并索引节点.由于INSERT,节点可能需要拆分.经过多次REPLACE INTO执行后,如果使用SELECT/UPDATE或INSERT INTO ...在DUPLICATE KEY上,最有可能的是你的索引比它本来更碎片化了
此外,还有"嗯,如果行不在那里,我们创造它.如果它在那里,它只是得到更新"的概念.这是错误的.该行不仅会更新,而是完全删除.问题是,如果该表上有PRIMARY KEY,并且REPLACE INTO没有为PRIMARY KEY指定值(例如,它是AUTO_INCREMENT列),则新行获取不同的值,这可能不是什么你在寻找行为.
REPLACE INTO的许多用途无意更改PRIMARY KEY(或其他UNIQUE KEY)值.在这种情况下,最好不要管它.在我看过的生产系统上,将REPLACE INTO更改为INSERT INTO ... ON DPLICATE KEY导致吞吐量增加10倍(以每秒查询数衡量)并且IO操作和负载平均值急剧下降.
总之,REPLACE INTO 可能适合您的实施,但您可能会发现使用它更合适(风险更小)INSERT ... ON DUPLICATE KEY UPDATE.
| 归档时间: |
|
| 查看次数: |
74083 次 |
| 最近记录: |