如何解决MYSQL更新查询随机需要很长时间
我在网络服务器上有一个 php 脚本,称为每秒一个。 此脚本访问 mysql 数据库并读取/更新一些信息。大多数情况下,脚本会在
被编辑的表格只有1行4列。
通过记录脚本不同部分使用的时间,我发现时间总是被第一个 UPDATE 查询消耗。如果查询顺序发生变化,情况也是如此。
我也尝试将所有内容都放在一个 mySql 事务中,然后提交函数会占用第一个 UPDATE 查询通常使用的时间。
我已经通过“show open tables WHERE In_use > 0”检查锁定的表;但没有找到。
通常需要时间的查询代码如下:
// Add Timestamp
echo ("BeforeTimestamps Updated" . (time()- $time) . "Seconds"); // DEBUG DEBUG DEBUG
$time = time();
// Try updating Timestamp
$sql = "UPDATE $LobbyID SET lastconnect=$reftime WHERE id = $PlayerID";
$conn -> query($sql);
echo ("Timestamps Updated" . (time()- $time) . "Seconds"); // DEBUG DEBUG DEBUG
因此,有时出于某种原因,连接的第一个更新查询需要几秒钟,而我不知道为什么。所以如果有人能帮忙,我会很高兴。
编辑: 根据评论中的要求;这是显示创建表
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| L2787828 | CREATE TABLE `L2787828` (
`id` int unsigned NOT NULL,`type` varchar(2) NOT NULL,`command` text NOT NULL,`lastconnect` int NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
解决方法
(如果我得出错误的结论,请道歉。)
你们有几张桌子? L2787828
让我担心你可能有 2787828 个表!这是一个严重的问题——表的缓存空间有限,打开(和必要的关闭)很多表会非常低效。 将所有相似的表合并到一个表中,并根据需要使用额外的列来区分行,这样效率更高。
(有一个单行,甚至单列的表格是可以的,但如果它不是许多类似表格中的一个。)
时间解释如下:
- 从
table_open_cache
中撞出一些其他“打开的桌子”。 - 打开
L2787828
-- 这涉及通过操作系统访问至少两个文件,以及 InnoDB 中的一些元表。 - 然后继续
UPDATE
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。