1

我有一个用于机票预订/购买应用程序的几乎完全标准化 (3NF) 的数据库,该数据库在我的国家被一家旅游公司广泛使用。它在MySQL中。

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

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

唯一重要的旧数据是注册乘客与公司一起旅行的次数。尽管这可能不是最好的主意,但我只是计划将一个整数值添加到“乘客”表中,我将在该表中保留旧计数。就如此容易。

但这就是问题所在。当我运行以下查询时,我的 phpMyAdmin(或管理员)挂断了。服务器也是如此,并且表格以某种方式被锁定。除非我重新启动服务器,否则它不起作用。

这是查询。这很美

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

我给了它大约 30 分钟的运行时间。永无止境。它可能出了什么问题?任何帮助将不胜感激。

另外,如果有比这个更好的选择,请提出建议。

4

2 回答 2

0

如果没有 group by,子查询将无法工作,这就是它没有显示任何进展的原因。

于 2013-07-15T07:53:38.513 回答
0

您应该在脚本中包含一些详细的消息。

还首先进行选择并循环通过更新表的结果。如果您使用 MyISM 表,那么当您对一行进行更新时,整个表都会被锁定。你可以尝试切换到innodb。还要确保有一个索引booking.Passengerpassenger.ID

于 2013-07-15T07:53:48.170 回答