我有一个cron脚本,它创建了mysql表的更新版本,该表是为站点搜索目的而优化的。
在站点搜索中使用的表称为tblSearch。
cronjob创建一个新的表wrkSearch,当它填充表结束时,删除tblSearch和重命名wrkSearch (两个表都有MySam引擎)。
DROP TABLE IF EXISTS `tblSearch
RENAME TABLE `wrkSearch` TO tblSearch这很好,但我想知道这是否是解决这个问题的好办法。
我想知道你的考虑是否根据表的大小而改变.例如:“对于非常大的表来说,解决方案可能是危险的.”
我知道,在mysql表中更改某些内容的每个查询都是在文件系统上写东西.但是,在重命名而不是更新/插入之间有什么区别吗?我正在试图了解RENAME命令是否对文件系统有更大的影响。
表中的另一个元素是te数据库是用主从结构复制的.因此,我还想知道这是否最终会增加重命名查询背后的风险
对我来说重要的另一个方面是使用的系统资源的数量.重命名操作是否比更新/插入更贪婪?
发布于 2011-07-27 12:23:00
您应该更改顺序;首先重命名,而不是删除:
RENAME TABLE tlbSearch TO tblSearchDropMe, wrkSearch TO tlbSearch;
DROP TABLE tblSearchDropMe;由于重命名是原子的,因此其他进程绝不会访问tblSearch;当第一次删除时,可能会发生重命名。
除此之外,我没有看到任何与复制相关的问题。
发布于 2011-07-27 11:53:47
重命名本身是超快的。如果要删除表中的所有内容并将其创建为creating,则此方法是可以的。(不过,请检查它是否确实正确地复制。)
但是,关于复制,这意味着需要传输表的整个数据。
如果可以的话,最好是更新表中的数据--这样只会改变一些数据,而不是所有的东西。
我要指出的是,这种操纵是不受欢迎的但就像所有的规则一样,有时你必须打破它们。
https://stackoverflow.com/questions/6843801
复制相似问题