gpt4 book ai didi

mysql - InnoDB 与 MyIsam 在频繁排序的 MySQL 5.5 表上的比较

转载 作者:行者123 更新时间:2023-11-29 23:54:36 24 4
gpt4 key购买 nike

我有一个包含大约 100k 条记录的表(当前为 InnoDB)。这些记录有一个顺序列,因此它们可以组成一个有序队列。实际上,这些记录属于大约 40 个部门,这些部门有自己的队列,而这些队列又在该表中拥有自己的记录。

问题是我们不断收到“锁定等待时间”错误,因为各个部门同时对其队列(和记录)进行排序。

我知道MyIsam是表级锁引擎,而InnoDB是行级。问题是我不确定哪种操作对于这种操作来说更快。

另一件事是,该表与其他 InnoDB 表在各种查询中连接,我不知道如果我将该表切换到 MyIsam 会发生什么。

表结构如下:

CREATE TABLE `ssti` (
`demand_nber` MEDIUMINT(8) UNSIGNED NOT NULL COMMENT,
`year` CHAR(4) NULL DEFAULT NULL COMMENT,
`department` CHAR(4) NULL DEFAULT NULL COMMENT '4 caracteres',
-- [other columns ]
`priority` INT(10) UNSIGNED NOT NULL DEFAULT '9999999',
PRIMARY KEY (`NR_DMD`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;

这是更新优先级的 java 代码:

PreparedStatement psUpdatePriority = con.prepareStatement("UPDATE `ssti` SET `priority` = ? WHERE demand_nber=?;");

for (int i = 0; i < demands.length(); ++i) {
JSONObject d = demands.getJSONObject(i);

psUpdatePriority.setInt(1, d.getInt("newPriority"));
psUpdatePriority.setInt(2, d.getInt("demandNumber"));
psUpdatePriority.addBatch();
}

int[] totalUpdated = psUpdatePriority.executeBatch();

最佳答案

调查性能问题时,请务必联系 slow query log这样您就可以记录导致问题的特定查询。

这里看起来是您在 WHERE 子句中包含了一列未编入索引的列。这对于大型数据集来说是极其痛苦的,因为它需要“表扫描”,或者读取每条记录并按顺序对其进行评估。

编入索引后,您的查询速度应该会明显加快。

如果您真的陷入困境,您可能需要将每个部门分成自己的表。这是很难撤消的,所以我只会将其作为最后的手段。

关于mysql - InnoDB 与 MyIsam 在频繁排序的 MySQL 5.5 表上的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25435115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com