2017-07-12 10 views
0

テーブルにクラスタ化されていないインデックスを作成する必要があります。ここではwhere句に5つの列を使用します。検索を避けるためにinclude(Covering)を使わなければなりません。各インデックスにインクルード列を含む5つの非クラスタ化インデックスを作成するか、インクルード列を含む5つのインデックスを持つ1つのインデックスを作成する必要があります。私は約5000万レコードを持っています。与えられたシナリオには何が最善でしょうか。検索のパフォーマンスを向上させる最善の方法を提案してください。SQL Serverインデックスの作成

+0

実行する予定のクエリを表示できますか?検索を避ける必要があるかどうかは、どの列を選択するかによって異なります。 –

+0

NCインデックスを作成する必要があるのはなぜですか、クエリプランのものであり、5つのインデックスを作成する必要はありません。 –

+0

billing.InvoiceItemからline_item_total、line_item_total、line_item_totalをlineItem.invoice_id = invoice.nvoice_idでインボイスインボイスに追加します。invoice.invoice_number = ''およびcustomer = ''とucid = '' make = ''とSERIAL_NUMBER = ''とdcn = ''とapplication = '' –

答えて

0

@Baskar、 このクエリを実行し、インデックスを作成する必要があることをお勧めします。テーブルには5つのNCインデックスが必要です。このクエリはInfoのみのため、このクエリで提案されたすべてのインデックスを作成する必要はありません。あなたのテーブル名は、where句

SELECT TOP 10 
dm_mid.database_id AS DatabaseID, 
dm_migs.avg_user_impact*(dm_migs.user_seeks+dm_migs.user_scans) Avg_Estimated_Impact, 
dm_migs.last_user_seek AS Last_User_Seek, 
OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) AS [TableName], 
'CREATE INDEX [IX_' + OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) + '_' 
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.equality_columns,''),', ','_'),'[',''),']','') 
+ CASE 
WHEN dm_mid.equality_columns IS NOT NULL 
AND dm_mid.inequality_columns IS NOT NULL THEN '_' 
ELSE '' 
END 
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.inequality_columns,''),', ','_'),'[',''),']','') 
+ ']' 
+ ' ON ' + dm_mid.statement 
+ ' (' + ISNULL (dm_mid.equality_columns,'') 
+ CASE WHEN dm_mid.equality_columns IS NOT NULL AND dm_mid.inequality_columns 
IS NOT NULL THEN ',' ELSE 
'' END 
+ ISNULL (dm_mid.inequality_columns, '') 
+ ')' 
+ ISNULL (' INCLUDE (' + dm_mid.included_columns + ')', '') AS Create_Statement 
FROM sys.dm_db_missing_index_groups dm_mig 
INNER JOIN sys.dm_db_missing_index_group_stats dm_migs 
ON dm_migs.group_handle = dm_mig.index_group_handle 
INNER JOIN sys.dm_db_missing_index_details dm_mid 
ON dm_mig.index_handle = dm_mid.index_handle 
WHERE dm_mid.database_ID = DB_ID() and OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) = 'MyTable' 
ORDER BY Avg_Estimated_Impact DESC 
GO 
+0

@B House、結果セットはありません。 –

+0

@BaskarManoharanは2番目のwhere節を削除して –

+0

@B Houseを実行します。そのクエリーの背後にあるロジックについて説明してください。 –

0

に変更しますが、実行計画モード(Ctrl + Shiftキー+ ALT + LまたはCtrlキーを押しながらL)でクエリを実行します。このモードはインデックスを示唆します。これを作成します。

関連する問題