我正在构建一个应用程序,需要清空MySQL表并每分钟重新填充新数据。同时,预计该表将每秒接收10-15个SELECT语句。 SELECT语句通常应该非常快(每次选择10-50个中等长度的字符串)。我担心的一些事情:
是否有可能在TRUNCATE和UPDATE查询之间运行SELECT查询以返回0行?执行TRUNCATE-UPDATE查询对时,是否需要锁定表?
对于此设置,我是否应该担心任何重大的性能问题?
答案 0 :(得分:-1)
最有可能是实现目标的更好方法。但是,无论如何,这都是您的问题的可能答案:您可以封装要在事务中一起执行的查询。我最喜欢的是
else // you have to cover all conditions
return "none"; // thus you should add these
编辑:上述部分是完全错误的,请参阅Philip Devine的评论。感谢。强>
关于性能问题:反复连接到服务器可能成本很高。如果你有持久连接,你应该没事。通过批量执行多个查询或使用Prepared Statements,您可以在这里和那里节省一点点。
答案 1 :(得分:-2)
为什么你需要每分钟截断它?是的,这将导致您的用户没有返回任何行。只需更新行而不是截断并插入。
第二个选项是将新值插入到新表中,将这两个表重命名为:
RENAME TABLE tbl_name TO new_tbl_name
[, tbl_name2 TO new_tbl_name2]
然后截断旧表。
然后您的用户看到零停机时间。另一个答案中的截断忽略了交易并立即发生,所以不要这样做!!