最近项目需求,有400万用户的模糊查询,带4个查询条件,加上排序,最后不完美实现。
记录过程如下:
模拟了400万条数据
先建立复合索引
首先解决模糊查询的问题,使用覆盖索引只查询主键,通过执行计划可以看出走了索引。
select vid from t_vt_info t where full_name like '%张%'
然后增加查询条件,执行计划可以看到,仍然可以走复合索引。
select vid from t_vt_info t where
full_name like '%张%'
and fee_year=0
and registered_city_code='230100'
and registered_district_code='230103'
加上排序和分页
select vid from t_vt_info t where
full_name like '%张%'
and fee_year=0
and registered_city_code='230100'
and registered_district_code='230103'
order by full_name desc
limit 1,10
查询全部字段,需要加一层innerjoin
select * from t_volunteer_info a INNER JOIN
(select vid from t_volunteer_info t where
full_name like '%张%'
and fee_year=0
and registered_city_code='230100'
and registered_district_code='230103'
order by full_name desc
limit 1,10) b on a.vid=b.vid
至此,sql优化完成。