簡體   English   中英

調整以下查詢以獲得更好的性能

[英]Tune the following query for better performance

請幫助我調整此sql服務器查詢。 這里vcompanyquicksearchcompany表上的視圖。

我應該創建什么索引? 執行計划中正在執行一項分類操作,費用為24%,即

 [CCEP_DEV].[dbo].[Company].vchContactFirstName Descending,
 [CCEP_DEV].[dbo].[Company].iCompanyId Ascending

我不知道為什么要進行第二次排序...有人可以建議原因嗎?

select top *
 from vCompanyquicksearch 

LEFT OUTER JOIN ReferenceParameters r1
                    on  vCompanyquicksearch.iCompanyTypeCode  = r1.iParameterId AND
          r1.iSiteId =1

LEFT OUTER JOIN ReferenceParameters r2
                    on  vCompanyquicksearch.iCompanySubTypeCode = r2.iParameterId AND
          r2.iSiteId =1

LEFT OUTER JOIN ReferenceParameters r3
                    on  vCompanyquicksearch.iPhoneTypeId = r3.iParameterId AND
          r3.iSiteId =1

LEFT OUTER JOIN Country c ON
                    vCompanyquicksearch.chCountryCode        = c.chCountryCode       AND
                    ISNULL(vCompanyquicksearch.chCountryCode,'''') <> '''' and
           c.iSiteId = 1

LEFT OUTER JOIN Region r ON
                    vCompanyquicksearch.chCountryCode        = r.chCountryCode       AND
                    ISNULL(vCompanyquicksearch.chCountryCode,'''') <> ''''  AND
                    vCompanyquicksearch.chRegionCode        = r.chRegionCode       AND
                    ISNULL(vCompanyquicksearch.chRegionCode,'''') <> '''' and
          r.iSiteId = 1

where vCompanyquicksearch.isiteid = 1 and vCompanyquicksearch.tirecordstatus = 1 and vCompanyquicksearch.iCompanyId in (

select distinct * from (

select customer_id from csu_customer_policy
    inner join csu_policy on csu_policy.policy_number = csu_customer_policy.policy_number
    and csu_policy.data_source = csu_customer_policy.data_source
    where csu_policy.vehicle_no in(
'sgv3976r')
  and csu_customer_policy.delete_status = 0 and csu_customer_policy.site_id = ' 1 '
) yTable
) Order by vchName desc

試試這個-

;WITH cte AS 
(
    SELECT *
    FROM ReferenceParameters r
    WHERE r.iSiteId = 1
)
SELECT /*TOP*/ *
FROM (
    SELECT *
    FROM dbo.vCompanyquicksearch c1 --<-- I think the main problem in this view
    WHERE c1.isiteid = 1 
        AND c1.tirecordstatus = 1  
) c1
LEFT JOIN cte r1 ON c1.iCompanyTypeCode = r1.iParameterId
LEFT JOIN cte r2 ON c1.iCompanySubTypeCode = r2.iParameterId
LEFT JOIN cte r3 ON c1.iPhoneTypeId = r3.iParameterId
LEFT JOIN (
    SELECT *
    FROM dbo.Country c
    WHERE c.iSiteId = 1
) c ON c1.chCountryCode = c.chCountryCode 
    AND ISNULL(c1.chCountryCode, '') != ''
LEFT JOIN (
    SELECT *
    FROM dbo.Region r
    WHERE r.iSiteId = 1
) r ON c1.chCountryCode = r.chCountryCode 
        AND c1.chRegionCode = r.chRegionCode 
        AND ISNULL(c1.chCountryCode, '') != ''  
        AND ISNULL(c1.chRegionCode,'') != '' 
WHERE c1.iCompanyId IN 
(
    SELECT DISTINCT customer_id 
    FROM dbo.csu_customer_policy p
    JOIN dbo.csu_policy pc ON pc.policy_number = p.policy_number
        AND pc.data_source = p.data_source
    WHERE pc.vehicle_no = 'sgv3976r'
      AND p.delete_status = 0 
      AND p.site_id = ' 1 '
)
ORDER BY vchName DESC

更新:

...
SELECT *
FROM (
    SELECT TOP ... *
    FROM dbo.vCompanyquicksearch c1
    WHERE c1.isiteid = 1 
        AND c1.tirecordstatus = 1
    ORDER BY vchName DESC  
) c1
...
WHERE c1.iCompanyId IN 
(
    SELECT DISTINCT customer_id 
    FROM dbo.csu_customer_policy p
    JOIN dbo.csu_policy pc ON pc.policy_number = p.policy_number
        AND pc.data_source = p.data_source
    WHERE pc.vehicle_no = 'sgv3976r'
      AND p.delete_status = 0 
      AND p.site_id = ' 1 '
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM