私は本のオンライン販売ウェブサイトを持っています、システムには、と呼ばれるテーブルがあり、Order
以下のようないくつかの列があります:
OrderID int (Primary key),
Library_ID int,
Mode int,
BookId int,
Ext_User_ID varchar(2000),
Activated varchar(1),
RequiredDate datetime,
AmountBuy int,
APPROVAL_DATE datetime,
...
したがって、テーブルには700万を超える行があり、現在、Webページにクエリ条件を追加する作業を行っています。SQLスクリプトは次のようになります。
SELECT * FROM Book b, Library l, [Order] o
WHERE o.bookid = b.bookID
AND o.mode = 'A'
AND o.library_ID = l.library_ID
AND l.library_ID > 19
AND b.publisher_id > 1000
AND b.print_id > 800
AND NOT EXISTS (SELECT * FROM ExtBOOK WHERE b.bookid = extbookid AND library_ID = l.library_ID)
AND o.activated = 'Y'
AND b.eisbn13 LIKE '978%'
AND len(o.ext_user_id) > 3
AND b.bookid > 200000
AND b.bookid in (SELECT bookid FROM category WHERE categoryid > 2)
ORDER BY o.orderid DESC
このスクリプトには、考えられるすべてのクエリ条件が含まれている可能性があります。「含まれる実際の実行プラン」をオンにしてManagement Studioで実行した後、推奨事項では、Order
テーブルにインデックスを作成する必要があると述べています。
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Order] ([MODE],[ACTIVATED],[LIBRARY_ID],[BOOKID])
INCLUDE ([OrderID],[EXT_USER_ID],[APPROVAL_DATE])
ただし、インデックスを作成しようとすると、すでにそこにある他の3つのインデックスが見つかりました。それらは次のとおりです。
create nonclustered index IDX_Order_1 { MODE asc}
create nonclustered index IDX_Order_2 { Library_ID asc, EXT_USER_ID asc, BookID asc}
create nonclustered index IDX_Order_3 { BOOKID asc, Library_id asc, MODE asc }
上記の3つのインデックスが作成されました。インデックスを作成したい場合、重複を感じたということですが、それらをマージできますか?または、各インデックスは特定のクエリ用であり、テーブルが毎日増加しているため、クエリ以外でどのアプリまたはどのSQLスクリプトを使用しているかを確認できません。何か案が?