我有一個數百萬行的數據庫,我想創建一個索引來修復性能問題,因爲查詢過度使用處理器。 數據庫託管在MS Azure上。創建一個索引來優化MS SQL查詢
,如果我有類似以下內容的查詢,例如讓員工誰是不是經理:
SELECT name, position, job title WHERE name LIKE '{0}%' AND manager = 0 AND employee = 1 ORDER BY senior DESC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
經理,僱員和資深都是布爾(高級僱員應顯示第一次結果)
我們試圖類似於以下,但服務器仍然無法處理流量的東西:
CREATE NONCLUSTERED INDEX [IX_Index] ON [dbo].[Employees]
(
[Manager] ASC,
[Employee] ASC,
[Name] ASC
)
INCLUDE ( [Position],
[JobTitle],
[Senior]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = ON, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
執行規劃顯示:
47上索引%尋求和前N個排序的53%,如果我從SSMS搜索
17%索引查找,26%的並行性,56%的排序上跟蹤查詢從web應用
(包括web應用和數據庫託管在Azure上)
什麼是適當的索引?
編輯:
我收到一個建議使用過濾指數(等,其中經理= 0和員工= 1)
但SQL Server將不選擇它,我不能強制它。有什麼建議麼?
請顯示執行計劃。我建議首先放置最具選擇性的列,'[Name] ASC,[Manager] ASC,[Employee] ASC'。 – Serg
@Serg請參閱上面的修改。非常感謝。 – Techy
@Serg另外, 是否最好在開始或內部包含「高級」?因爲我們有它的順序 – Techy