我有一个网络系统,我正在迁移到aws,大多数区域似乎没问题。在web系统上有一个特定的点击,在aws方面非常慢。我能够找到执行的mysql查询,以便将它与旧系统进行比较,一切都是相同的,甚至是索引。查询在
下面select distinct cf_1274 from vtiger_cf_1274
inner join vtiger_role2picklist on vtiger_role2picklist.picklistvalueid = vtiger_cf_1274.picklist_valueid
where roleid in ("H3","H4","H5","H51","H50","H49","H2") and picklistid in (select picklistid from vtiger_cf_1274)
order by sortid asc
我可以看到两者之间唯一的区别是旧的mysql服务器版本是5.0.95,而较新的版本是5.6.X
我也能够对两者进行解释,这是我看到差异的地方。较新的系统在解释查询中的额外列上有一些“使用连接缓冲区(块嵌套循环)”,而旧的系统没有。我假设这一定是问题,但我不知道如何处理它。
答案 0 :(得分:0)
您的查询不符合哪些字段来自哪个表格,至少您应该在我开始时将ALIAS应用于查询。
您正在使用选项列表值加入vtiger_cf_1274表的选项列表表,那么为什么不在BOTH选项列表值和选项列表ID上进行连接。这样,您就可以摆脱IN(select)限定符。
此外,我成为新的加入条件,我会在(picklistvalueid,picklistid)索引你的角色选择列表表,以优化标准..
显示这些表的示例数据上下文有助于确认/简化/解决您的查询。
select distinct
cf_1274
from
vtiger_cf_1274 VT
inner join vtiger_role2picklist PL
on VT.picklist_valueid = PL.picklistvalueid
AND VT.picklistid = PL.picklistID ???
where
roleid in ("H3","H4","H5","H51","H50","H49","H2")
order by
sortid asc