首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有频繁截断、更新和选择功能的MySQL表

问具有频繁截断、更新和选择功能的MySQL表
EN

Stack Overflow用户
提问于 2015-06-19 06:48:01
回答 2查看 321关注 0票数 2

我正在构建一个应用程序,该应用程序需要清空MySQL表,并每分钟使用新数据重新填充。同时,预计该表将不断接收每秒10-15条SELECT语句。SELECT语句通常应该非常快(每次选择10-50个中等长度的字符串)。以下是我担心的几件事:

是否有可能在TRUNCATE和UPDATE查询之间运行SELECT查询,从而返回0行?在执行TRUNCATE-UPDATE查询对时,是否需要锁定表?

关于这个设置,有没有什么我应该担心的重要的性能问题?

EN

回答 2

Stack Overflow用户

发布于 2015-06-19 06:56:28

最有可能的是有一个更好的方法来实现你的目标。但是,对于您的问题,这里有一个可能的答案:您可以封装要在一个事务中一起执行的查询。从我脑海中浮现出来的东西

代码语言:javascript
复制
BEGIN TRANSACTION;
TRUNCATE foo;
INSERT INTO foo ...;
COMMIT;

编辑:上面的部分是完全错误的,请参阅Philip Devine的评论。谢谢。

关于性能问题:重复连接到服务器的成本可能很高。如果你有一个持久的连接,你应该没问题。通过在批处理中执行多个查询或使用准备好的语句,您可以在这里和那里节省一些资源。

票数 -1
EN

Stack Overflow用户

发布于 2015-06-19 06:52:31

为什么你每分钟都要截断它呢?是的,这将导致您的用户没有返回任何行。只需更新行,而不是截断和插入。

第二种选择是将新值插入到新表中,将这两个表重命名为:

代码语言:javascript
复制
RENAME TABLE tbl_name TO new_tbl_name
[, tbl_name2 TO new_tbl_name2]

然后截断旧的表。

这样,您的用户就可以看到零停机时间。另一个答案中的截断忽略了事务,并立即发生,所以不要这样做!

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30927109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档