本篇文章主要介绍了"MySQL查询优化 mysql 语句优化一列",主要涉及到MySQL查询优化方面的内容,对于其他数据库感兴趣的同学可以参考一下:
优化前语句:SELECTifnull(s.mileage, -1) as mile,s.fuel_hkm as val,t.fhkm_rank as rank,...
优化前语句:
SELECT
ifnull(s.mileage, -1) as mile,
s.fuel_hkm as val,
t.fhkm_rank as rank,
ifnull((select u.photo from app_user u where u.user_id = t.user_id limit 1),'') as path,
case when s.car_id = '***********' then 0
else 1 end as self,
ifnull((
SELECT
case
when ifnull(u.nickname, '') != '' then u.nickname
when ifnull(u.username, '') != '' then u.username
when ifnull(u.customer_number, '') != '' then u.customer_number
else u.mobile END as uname
FROM
app_user u
WHERE
u.user_id = t.user_id
LIMIT 1
),'') as manname,
ifnull((select case when ifnull(c.nickname,'') != '' then c.nickname else REPLACE(c.lisence,SUBSTR(c.lisence,3,3),'***') end from app_car c where c.car_id = t.car_id limit 1),'') as carname
FROM
app_car_sum_7daily s,
app_rank_ka t
WHERE
t.date = '2016-07-12'
and t.date = s.date
and t.car_id = s.car_id
and s.fuel_hkm > 0
and t.fhkm_rank > 0
ORDER BY rank,self,convert(manname using gbk) limit 10
优化后语句:
select * from (
select
ifnull(s.mileage, -1) as mile,
s.fuel_hkm as val,
t.fhkm_rank as rank,
ifnull(u.photo,'') as path,
case when s.car_id = '***********' then 0
else 1 end as self,
case
when ifnull(u.nickname,'') != '' then u.nickname
when ifnull(u.username,'') != '' then u.username
when ifnull(u.customer_number,'') != '' then u.customer_number
else ifnull(u.mobile,'') end as manname,
case
when ifnull(c.nickname,'') != '' then c.nickname
else ifnull(REPLACE(c.lisence,SUBSTR(c.lisence,3,3),'***'),'') end as carname
from
app_rank_ka t
join app_car_sum_7daily s on (s.date = t.date and s.car_id = t.car_id and s.fuel_hkm > 0)