2017-09-29 11 views
3

次のクエリを最適化しようとしていて、10秒しかチップ化できませんでした。私は、結合に関与する外部キーテーブルの列に非クラスタ化インデックスを適用しようとしました。 質問をより速くするためにできることを誰かに教えてもらえますか?インデックス付きのクエリが十分に最適化されていません

select 
    c.companyId, 
    c.companyName, 
    c.city, 
    cst.companyStatusTypeName, 
    ct.companyTypeName, 
    sc.simpleIndustryDescription, 
    c.officeFaxValue, 
    c.officePhoneValue, 
    c.streetAddress, 
    c.streetAddress2, 
    c.yearFounded, 
    c.zipCode, 
    c.webpage, 
    rep.templateTypeName, 
    rcg.isoCountry2, 
    rs.abbreviation 
from ciqCompany c 
    inner join ciqCompanyStatusType cst on cst.companystatustypeid = c.companystatustypeid 
    inner join ciqCompanyType ct on ct.companyTypeId = c.companyTypeId 
    inner join refReportingTemplateType rep on rep.templateTypeId = c.reportingtemplateTypeId 
    inner join refCountryGeo rcg on c.countryId = rcg.countryId 
    inner join refState rs on rs.stateId = c.stateId 
    inner join ciqSimpleIndustry sc on sc.simpleIndustryId = c.simpleIndustryId 

実行計画

enter image description here

表の定義

enter image description here

+0

あなたはDDL表示してください説明することができますか?それ以外の場合は、無作為に行うことをお勧めします。 –

+0

テーブル定義、インデックス、実行計画がない場合これはメカニックを呼び出して「私は青い車を持っていますが、どうすれば速くできますか? –

+0

実行計画とテーブル定義を含めるように投稿を更新しました – Tom

答えて

0

実行計画を見ると、キーの参照が最も時間がかかっていることに気付きました。
そのクエリのすべての列を含むインデックスを作成してみてください。
または、インデックスに含まれている列を使用してみてください。

いくつか参考になっ読書:https://www.red-gate.com/simple-talk/sql/learn-sql-server/using-covering-indexes-to-improve-query-performance/

+0

ごめんなさい。そのクエリのすべての列を含むインデックスを作成します。 – Tom

+0

私が提供したリンクには説明がありますが、基本的には次のようなものです:実行計画では、Properties> Output Listに行き、省略記号(...)をクリックしてどの列が照会されているかを確認します。次に、出力リストのすべての列を含むciqCompanyテーブルにクラスタ化されていないインデックスを作成します。 – pbrito

+0

カバーされたインデックスを試しました。それは通常よりもさらに時間がかかりました。ここでのスクリプトは、非クラスタ化インデックスXpressFeed_Dev.dbo.ciqCompany上ix_companyCoveringIndex(companyStatusTypeId、companyTypeId、reportingTemplateTypeId、countryId、STATEID、simpleIndustryId) は(のcompanyName、市、officeFaxValue、officePhoneValue、streetAddress2、yearFounded、郵便番号、Webページ) – Tom

関連する問題