【发布时间】:2012-03-26 20:39:32
【问题描述】:
使用 MySQL 数据库时,我在创建存储过程和事件计时器时遇到了问题。 我创建了一个空表,通过 SELECT INTO 填充了另一个数据。 在填充之前,我截断了当前数据。它用于仅跟踪从当前日期起 2 个月内发生的日志条目。
这会将 350k+ 的日志表变成大约 750 个,这确实加快了报告查询的速度。
问题在于,如果客户端在 TRUNCATE 语句和 SELECT INTO 语句之间精确发送查询(考虑到 EVENT 设置为每 1 分钟运行一次,则该查询很有可能),查询不会返回任何行...
我研究了在运行此 PROCEDURE 时锁定表上的读取,但在 STORED PROCEDURES 中不允许锁定。
谁能想出一个(最好)不需要改造的解决方法? 我真的需要在这里指出正确的方向。
谢谢, 最大
【问题讨论】:
-
也许我在这里有点误解了这个问题,但是在你插入的表上查询不是更有效吗?或者查询该表中的视图?
-
效率不高。查询是从登录发送的,这意味着访问具有 350k+ 条记录的表需要大约 6 秒的时间。但是,将服务器端的表查询到特定日期范围的新表中,最终会得到大约 750 条记录。查询较小的表要快得多。视图在被查询时运行,因此它并不能真正加快速度。
标签: mysql stored-procedures locking innodb truncate