MySQL查询以不同的速度运行

时间:2016-06-28 22:55:26

标签: mysql

我有一个网络系统,我正在迁移到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

我也能够对两者进行解释,这是我看到差异的地方。较新的系统在解释查询中的额外列上有一些“使用连接缓冲区(块嵌套循环)”,而旧的系统没有。我假设这一定是问题,但我不知道如何处理它。

1 个答案:

答案 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
相关问题