Comme je sais que l'index de couverture est index qui devrait inclure toutes les colonnes dans l'instruction SELECT. Si oui, si j'ai requête comme suit:La clarification de l'utilisation des index de couverture
SELECT ActionDate -- Дата мероприятия
,ManagerName -- ФИО менеджера
,City -- Город мероприятия
,Organazer -- Юр.Лицо организатора
,[Action] -- Мероприятие
,Category -- Категория
,EnteringProfitability -- Входящая доходность %
,PlaceId
,PlaceName
-- Выручка
,SUM(isMetroCashDesk * Price) AS RevenueMetro --'Выручка:Кассы-метро'
,SUM(isRestCashDesk * Price) AS RevenueRest --'Выручка:Кассы-остальные'
,SUM(isPortal2CashDesk * Price) AS RevenuePortal2 --'Выручка:Портал 2.0'
,SUM(isEurosetCashDesk * Price) AS RevenueEuroset --'Выручка:Евросеть'
,SUM(isPartnersCashDesk * Price) AS RevenuePartners --'Выручка:Партнеры (субагенты)'
,SUM(isCashDesksPlatforms * Price) AS RevenueCashDesksPlatforms --'Выручка:Кассы-площадки'
-- Билеты
,SUM(isMetroCashDesk) AS TicketsMetro --'Билеты:Кассы-метро'
,SUM(isRestCashDesk) AS TicketsRest --'Билеты:Кассы-остальные'
,SUM(isPortal2CashDesk) AS TicketsPortal2 --'Билеты:Портал 2'
,SUM(isEurosetCashDesk) AS TicketsEuroset --'Билеты:Евросеть'
,SUM(isPartnersCashDesk) AS TicketsPartners --'Билеты:Партнеры (субагенты)'
,SUM(isCashDesksPlatforms) AS TicketsCashDesksPlatforms --'Билеты:Кассы-площадки'
-- Доход
,SUM(isMetroCashDesk * Income) AS IncomeMetro --'Доход:Кассы-метро'
,SUM(isRestCashDesk * Income) AS IncomeRest --'Доход:Кассы-остальные'
,SUM(isPortal2CashDesk * Income) AS IncomePortal2 --'Доход:Портал 2.0'
,SUM(isEurosetCashDesk * Income) AS IncomeEuroset --'Доход:Евросеть'
,SUM(isPartnersCashDesk * Income) AS IncomePartners --'Доход:Партнеры (субагенты)'
-- Итого
,SUM(Price) AS RevenueTotal --'Выручка:Итого, руб'
,COUNT(*) AS TicketsTotal --'Билеты:Итого, шт'
,SUM(Income) AS IncomeTotal --'Доход:Итого, руб'
,CASE SUM(Price) WHEN 0 THEN NULL ELSE 100.0 * SUM(Income)/SUM(Price) END AS Profitability --'Доходность:Итого,%'
-- Без касс-площадок и касс-устроителей
,SUM(CASE isCashDesksPlatforms WHEN 0 THEN Price ELSE 0 END) AS RevenueWithoutCashDesksPlatforms --Выручка
,SUM(CASE isCashDesksPlatforms WHEN 0 THEN 1 ELSE 0 END) AS TicketsWithoutCashDesksPlatforms --Билеты
,SUM(CASE isCashDesksPlatforms WHEN 0 THEN Income ELSE 0 END) AS IncomeWithoutCashDesksPlatforms --Доход
,CASE SUM(CASE isCashDesksPlatforms WHEN 0 THEN Price ELSE 0 END)
WHEN 0 THEN NULL
ELSE 100.0 * SUM(CASE isCashDesksPlatforms WHEN 0 THEN Income ELSE 0 END)/SUM(CASE isCashDesksPlatforms WHEN 0 THEN Price ELSE 0 END)
END AS ProfitabilityWithoutCashDesksPlatforms --Доходность
FROM #Goran
GROUP BY ActionDate
,ManagerName
,City
,Organazer
,[Action]
,Category
,EnteringProfitability
,PlaceId
,PlaceName
ORDER BY ActionDate
,ManagerName
,City
,Organazer
,[Action]
,Category
Je pense que je ne peux pas inclure toutes les colonnes de partie SELECT dans la couverture index. Si oui, comment puis-je améliorer la performance de cette requête?
+1 pour la bonne réponse. – Devart
Lorsque j'ai utilisé celui-ci: CREATE INDEX NON CLUSTERED IDX_SEARCH ON #Goran (ActionDate, ManagerName, Ville, Organazer, [Action], Catégorie, EnteringProfitability, PlaceId, PlaceName), le temps d'exécution était de 9 secondes. Mais, quand j'ai utilisé celui-ci: CREATE INDEX NON CLUSTERED IDX_SEARCH ON #Goran (Id, ActionDate, ManagerName, Ville, Organazer) le temps d'exécution était de 6 secondes. Je ne sais pas pourquoi. – tesicg
L'index est créé sur une table temporaire. – tesicg