MySQL Update 查询需要更多时间来更新表

标签 mysql sql performance query-optimization

我写了两个 mysql 查询。

第一个:

SELECT I.Status FROM Test_chq_out_more100 O, chqinformore100 I
WHERE I.ACC_No = O.ACC_No  AND I.Chq_No = O.Begin_Chq_no;

第二个:

SELECT I.Status FROM Test_chq_out_more100 O, chqinformore100 I
WHERE I.ACC_No = O.ACC_No  AND I.Chq_No = (O.Begin_Chq_no + 1);

第一个查询需要 05 秒才能得到答案,但第二个查询需要 1165 秒才能返回结果。如何优化第二个查询以在 10 - 15 秒内获得结果。

chqinformore100 表中有 250 万条记录,Test_chq_out_more100 表中有 11000 条记录。

最佳答案

这是第二个查询,“已修复”以使用正确的 join 语法(这不应影响查询计划):

SELECT I.Status
FROM Test_chq_out_more100 O JOIN
     chqinformore100 I
     ON I.ACC_No = O.ACC_No  AND I.Chq_No = (O.Begin_Chq_no + 1);

可以通过读取O 表并在I 表中查找值来优化此查询。因此,索引 Test_chq_out_more100(ACC_No, Chq_No)。但是,由于添加了 1,它无法充分利用 chqinformore100(ACC_No, Begin_Chq_no) 上的索引。因此,我的建议是执行以下操作之一:

一:保持查询不变,并创建索引Test_chq_out_more100(ACC_No, Chq_No)

二:创建索引chqinformore100(ACC_No, Begin_Chq_no)并将查询更改为:

SELECT I.Status
FROM Test_chq_out_more100 O JOIN
     chqinformore100 I
     ON I.ACC_No = O.ACC_No  AND I.Chq_No - 1 = O.Begin_Chq_no;

关于MySQL Update 查询需要更多时间来更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25181577/

相关文章:

javascript - 什么是用于选择特定 div 中具有特定类的 anchor 元素的 jQuery 选择器

php - 运行过滤器时的查询不正确 - 查询未执行

MySQL根据一个表中的最新值从多个表中选择值

mysql - SQL删除回车

MYSQL - SELECT IN () ORDER BY IN ()

java - 在 Java 中反转字符串最有效的算法是什么?

mysql - 具有相同结果的两个 SQL 查询,但一个查询快一个数量级

mysql - 如何计算sql中列中值的数量百分比?

java - 相同的值多次保存到数据库中,即使 hibernate 中存在另一个列表

mysql - 连接和左连接