我有一本書在線銷售網站中,在系統中,有一個表叫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,
...
所以表中有過7個百萬行,目前我正在添加更多的查詢條件的網頁時,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])
然而,當我去創建索引,我發現其他三個指數法已經存在,它們分別是:
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腳本正在使用。 有什麼想法?
嗨Purplegoldfish,非常感謝,我已閱讀你推薦的文章,這是非常有用的,我認爲我理解索引的設計,並且索引IDX_Order_1 IDX_Order_2和IDX_Order_3可能用於某些特定的查詢,無論如何,我將創建IDX_order_4並查看性能是否有所提高。 – danmiao