您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何通过多个联接加快MySQL查询

如何通过多个联接加快MySQL查询

我会尝试以下方法

首先,请确保以下表和列上都有索引(括号中的每组列都应是一个单独的索引):

table1 : (subscribe, CDate)
         (CU_id)
table2 : (O_cid)
         (O_ref)
table3 : (I_oref)
         (I_pid)
table4 : (P_id)
         (P_cat)
table5 : (C_id, store)

其次, 添加上述索引并不能改善您的期望,请尝试将查询重写为

SELECT DISTINCT t1.first_name, t1.last_name, t1.email FROM
  (SELECT CU_id, t1.first_name, t1.last_name, t1.email
     FROM table1
     WHERE subscribe = 1 AND
           CDate >= $startDate AND
           CDate <= $endDate) AS t1
  INNER JOIN table2 AS t2
    ON t1.CU_id = t2.O_cid   
  INNER JOIN table3 AS t3
    ON t2.O_ref = t3.I_oref   
  INNER JOIN table4 AS t4
    ON t3.I_pid = t4.P_id   
  INNER JOIN (SELECT C_id FROM table5 WHERE store = 2) AS t5
    ON t4.P_cat = t5.C_id

我希望在这里,第一个子选择将大大减少要考虑加入的行数,希望使以后的加入工作更少。同上表5中第二个子选择的推理。

无论如何,请弄乱它。我的意思是,最终它只是一个SELECT-您不能用它真正伤害任何东西。检查由每个不同排列生成的计划,并尝试找出每个计划的优缺点。

分享并享受。

MySQL 2022/1/1 18:49:26 有267人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶