插入查询锁定整个数据库而不响应

时间:2013-07-15 07:43:57

标签: php mysql sql

我有一个几乎完全标准化(3NF)的机票预订/购买应用程序数据库,在旅行公司遍布全国各地。它位于 MySQL

最近它已超过1GB(DUMP SIZE)并且查询变得足够慢。为了减少查询时间和数据库大小(大大),我正在考虑做这个作弊。

我要将所有数据转储到离线服务器,管理员可以查看超过3个月的历史记录。然后从在线数据库中删除所有旧数据(通过查询)。相信我,旧数据在这里并不重要。

唯一重要的旧数据是注册乘客与公司一起旅行的时间。即使它可能不是最好的主意,我只是计划在“乘客”表中添加一个整数值,我将保留旧计数。就这么简单。

但这是问题所在。当我运行以下查询时,我的phpMyAdmin(或adminer)挂断了。那么服务器也会以某种方式锁定表。除非我重新启动服务器,否则它不起作用。

这是查询。这很漂亮

UPDATE `passenger` 
SET `CountAddition` = (
                       SELECT COUNT(1) FROM booking 
                       WHERE booking.Passenger = passenger.ID
                       )
WHERE 1

我已经给它约30分钟跑了。它永远不会结束。它可能出了什么问题?任何帮助都将非常感激。

此外,如果有比这更好的替代方案,请建议。

2 个答案:

答案 0 :(得分:0)

子查询在没有分组的情况下无效,这就是为什么它没有显示任何进展。

答案 1 :(得分:0)

您应该在脚本中加入一些详细信息。

也先进行选择并循环更新表格的结果。如果您使用MyISM表,那么当您对行进行更新时,整个表都会被锁定。您可以尝试切换到innodb。同时确保booking.Passengerpassenger.ID

上有索引