回答

收藏

如何通过多个连接加速?MySQL查询

技术问答 技术问答 404 人阅读 | 0 人回复 | 2023-09-14

这是我的问题,我正在选择和执行多个联系来获得正确的项目…它吸引了相当多的线路,超过1万条。当日期设定为1年时,此查询将花费5分钟以上。+ h/ Q- Q6 X( h" @9 D7 ?, p! E- S
不知道有没有可能,但恐怕用户会把日期扩大到10年左右,崩溃。  v% S3 ]4 Z8 N2 j6 J7 c
有人知道我能如何加快速度吗?这是查询。! ]! Q' m$ U- z: L) v; Y3 H
SELECT DISTINCT t1.first_name,t1.last_name,t1.email FROM table1 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 table5 AS t5 ON t4.P_cat = t5.C_id WHERE t1.subscribe =1 AND t1.Cdate >= $startDateAND t1.Cdate 我不是MySQL所以我很感激这方面的佼佼者!- {2 D7 j0 E/ B% ^2 T0 @
提前致谢!
5 ]! W1 p& h2 i更新6 q' f5 P7 v/ _8 u
这是你要求的解释* E) q: ]8 W- ^$ O
O_cid     O_ref   28  alphacom.t3.I_oref 1   1   1     SIMPLE  t1  eq_ref  PRIMARY     PRIMARY    4   alphacom.t2.O_cid   1   Using whereO_cid     O_ref   28  alphacom.t3.I_oref  1    1   SIMPLE  t1  eq_ref  PRIMARY     PRIMARY     4   alphacom.t2.O_cid   1   Using where我还为table5行和table4行添加索引,因为它们没有真正改变,但其他表每月大约有500个-1000个条目…我听说你应该为有这么多新项目的表添加索引....这是真的?
9 I5 C5 P$ [7 q  P6 T6 f                                                               
; J9 [6 |1 u  R8 Z: N8 |% p    解决方案:                                                                . }: O  C/ J2 A0 N
                                                                我将尝试以下方法:
  G2 L1 a' R! R# Z% q5 V首先,请确保下表和列上都有索引(括号中的每组列都应该是单独的索引):
7 Y  W" `( h- H+ k# ktable1 : (subscribe,CDate)         (CU_id)table2 : (O_cid)         (O_ref)table3 : (I_oref)         (I_pid)table4 : (P_id)         (P_cat)table5 : (C_id,store)其次,如果    添加上述索引不能提高您的期望。请尝试将查询重写为+ h& e1 T+ a5 N
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 我希望在这里,第一个子选择会大大降低考虑加入的行数,希望以后加入的工作会少一些。上表5中第二个子的推理。1 |/ d6 N' P# m7 O
无论如何,请弄乱它。我的意思是,最最终只是一个SELECT-您不能用它真正伤害任何东西。检查由每个不同排列生成的计划,并尝试找出每个计划的优缺点。0 h2 h  ^" k  Z
分享和享受。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则