请帮忙优化以下以下的查询语句
以下的查询语句,目的是查询出所有的单位名称等项目,其中要求单位名称不重复,并要求是以bgdid倒序排列,我的sql语句如下,虽然能实现,但查询时间太长,因此请教优化方式:
SELECT top 10 单位名称,单位地址,电话.电话号码 as 单位电话,传真.电话号码 as 单位传真,手机.电话号码 as 单位手机,邮政编码,Email,QS,产品名称,样品等级,商标,型号规格,标准号 from
((((((((((((报告单
inner join 单位名称 on 报告单.scdwmcid=单位名称.dwmcid)
inner join 单位地址 on 单位地址.dwdzid=报告单.scdwdzid)
inner join 电话号码 as 电话 on 电话.dhhmid=报告单.scdwdhid)
inner join 电话号码 as 传真 on 传真.dhhmid=报告单.scdwczid)
inner join 电话号码 as 手机 on 手机.dhhmid=报告单.scdwsjid)
inner join 邮政编码 on 邮政编码.yzbmid=报告单.scdwybid)
inner join Email on Email.Emailid=报告单.scdwemailid)
inner join QS on QS.QSid=报告单.qsid)
inner join 产品名称 on 产品名称.cpmcid=报告单.cpmcid)
inner join 样品等级 on 样品等级.ypdjid=报告单.ypdjid)
inner join 商标 on 商标.sbid=报告单.sbid)
inner join 型号规格 on 型号规格.xhggid=报告单.xhggid)
inner join 标准号 on 标准号.bzhid=报告单.cpbzid
and bgdid in (select top 10 max(bgdid) as maxbgdid from 报告单 inner join 单位名称 on 报告单.scdwmcid=单位名称.dwmcid where dbo.GetHeadPy(单位名称) like '%cd%' or 单位名称 like '%cd%' group by 单位名称) order by bgdid desc
------解决方案-------------------- dbo.GetHeadPy(单位名称) like '%cd%' or 单位名称 like '%cd%'
这句可以改成
charindex('cd',dbo.GetHeadPy(单位名称)+','+单位名称)>0 -- 其中的逗号是防止“dbo.GetHeadPy(单位名称)”的最后一个字符和“单位名称”的第一字符组合起来刚好等于cd
------解决方案--------------------SQL code
SELECT top 10 单位名称,单位地址
from 报告单
inner join 单位名称
on 报告单.scdwmcid=单位名称.dwmcid
where
bgdid in (select top 10 max(bgdid) as maxbgdid
from 报告单
inner join 单位名称 on 报告单.scdwmcid=单位名称.dwmcid
where dbo.GetHeadPy(单位名称) like '%cd%'
or 单位名称 like '%cd%' --本处可改为union all
group by 单位名称)
order by bgdid desc