我写了两个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条记录。
答案 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;