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

时间:2014-08-07 11:39:37

标签: 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表中有2.5M记录,Test_chq_out_more100表中有11000条记录。

1 个答案:

答案 0 :(得分:2)

以下是第二个查询,“修复”以使用正确的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;