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