我有下面的查询,我花了2秒来执行,现在需要大约10分钟,因为我在表custom_redemptions中添加了100个条目,在其他表中添加了大约10个条目。
对于DISTINCT
,它返回me
Showing rows 0 - 29 (96 total, Query took 0.00156 sec)
我拿出DISTINCT
来跟踪bug,它返回给我
Showing rows 0 - 29 (94174080 total, Query took 0.1510 sec)
有什么方法可以优化这个吗?
SELECT DISTINCT c.id, c.couponid, c.branchid, c.chainid
FROM `users_roles` a,
`field_data_field_ypefthinos` b,
`custom_redemptions` c,
`field_data_field_chain_manager` e,
`field_data_field_node_tax_inception` f,
`field_data_field_brand_manager` j,
`field_data_field_brand_node_ref` k,
`field_data_field_product_ref` i,
`field_data_field_company_manager` z,
`field_data_field_brand_company` t
WHERE (a.rid = 4
AND a.uid = 351
AND b.field_ypefthinos_uid = a.uid
AND b.entity_id = c.branchid)
OR
(a.rid = 5
AND a.uid = 351
AND e.field_chain_manager_uid = a.uid
AND e.entity_id = f.entity_id
AND f.field_node_tax_inception_tid = c.chainid)
OR
(a.rid = 9
AND a.uid = 351
AND j.field_brand_manager_uid = a.uid
AND j.entity_id = k.field_brand_node_ref_nid
AND k.entity_id = i.field_product_ref_nid
AND i.entity_id = c.couponid)
OR
(a.rid = 6
AND a.uid = 351
AND z.field_company_manager_uid = a.uid
AND z.entity_id = t.field_brand_company_nid
AND t.entity_id = k.field_brand_node_ref_nid
AND k.entity_id = i.field_product_ref_nid
AND i.entity_id = c.couponid)
步骤1。有4种情况下的OR
。将查询转换为4个SELECTs
的UNION
,每个OR
条件中有一个。
步骤2。删除每个SELECT
中未使用的表(以摆脱笛卡尔积)。
步骤3。将INDEX(uid, rid)
(以任意顺序)添加到a