我正在使用以下MySQL查询,它工作正常,我的意思是给我想要的输出但是...让我们先看看查询:
select
fl.file_ID,
length(fl.filedesc) as l,
case
when
fl.part_no is null
and l>60
then concat(fl.fileno,' ', left(fl.filedesc, 60),'...')
when
fl.part_no is null
and length(fl.filedesc)<=60
then concat(fl.fileno,' ',fl.filedesc)
when
fl.part_no is not null
and length(fl.filedesc)>60
then concat(fl.fileno,'(',fl.part_no,')', left(fl.filedesc, 60),'...')
when
fl.part_no is not null
and length(fl.filedesc)<=60
then concat(fl.fileno,'(',fl.part_no,')',fl.filedesc)
end as filedesc
from filelist fl
我不想重复使用长度函数,因为我猜它会在每次声称性能问题时都会遇到数据库。请建议我是否可以存储一次长度并多次使用。
答案 0 :(得分:4)
访问给定行后,对列执行的操作对性能的影响很小。所以你猜测它“更多地点击数据库”来重复使用那个长度函数并不像你想象的那么糟糕。
我将使用的类比是邮政承运人向您的房子发送邮件,该邮件位于城外数英里。他开车20分钟到你的邮箱,然后他担心一次插入一个字母到你的邮箱需要太多时间,而不是一次插入所有信件。与长途驾驶相比,低效率的成本是微不足道的。
也就是说,您可以使查询更简洁或更容易编码或查看。但这可能不会对性能产生很大的好处。
select
fl.file_ID,
concat(fl.fileno,
ifnull(concat('(',fl.part_no,')'), ' '),
left(fl.filedesc,60),
if(length(fl.filedesc)>60,'...','')
) as filedesc
from filelist fl