mysql优化。左表是25W数据,右表目前小表,但随后是百万,千万,亿级别的表,慢慢增长

现在的问题是,我左表是25W数据,一个部门表,右表是部门的积分明细表,现在需要左表连右表,然后用where like 范围查找,如果关键字是全表都有的话,查询出来的结果是25W条数据,查询很慢,大概要2S。

然后需求还要按积分的高低排名,同分数要按部门名字来排名,加上这个排序条件,就需要5S大概。

我想问下各位,对于这种情况,能怎么优化起来。

sql语句如下

SELECT 
ifnull(a.accumulative_integral,0) as accumulative_integral,
b.dept_full_name,
b.dept_name,
b.is_delete
FROM
tb_integral_statistics as b
LEFT  JOIN 
( select sum(score) as accumulative_integral,dept_full_name,is_delete
 from tb_party_integral
where is_delete = 0
 group by dept_full_name
 

) as a

ON a.dept_full_name = b.dept_full_name

WHERE
1 = 1
and b.dept_full_name like '1-%'
AND b.is_delete = 0
ORDER BY
accumulative_integral DESC,
CONVERT (dept_name USING gbk) ASC 
阅读 1.6k
1 个回答
✓ 已被采纳新手上路,请多包涵

现在要解决的是,如果是like 1-% 那就是全表都包含的关键字,所以要查询全表,但是如果是 1-2-% 或者 1-3-% ,或者任何一个,就是毫秒级别。
所以要解决的问题就是like 1-%的情况。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题