我写了两个 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/