Bonjour,
Je ne trouve pas comment optimiser la requête suivante:
Son plan de requête est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 SELECT TOP 50 MSGSEND.*, BILLING.PRICE, BILLING.CURRENCY, BILLING.FLOW, BILLING.REVENUESHARE, BILLING.ISACTIVE, CASE MSGSEND.IDGATEWAY WHEN 25 THEN CONVERT(VARCHAR(10), CONVERT(INT, PRICE * 100)) -- South Africa, Mira Gateway WHEN 28 THEN CURRENCY + CONVERT(VARCHAR(10), CONVERT(INT, PRICE * 100)) -- IPX CPA gateways WHEN 29 THEN CURRENCY + CONVERT(VARCHAR(10), CONVERT(INT, PRICE * 100)) -- IPX BULK gateways ELSE CURRENCY + CONVERT(VARCHAR(10), CONVERT(INT, PRICE)) END AS TARIFF FROM dbo.SMSSEND MSGSEND JOIN dbo.SMSBILLING BILLING(nolock) ON BILLING.IDBILLING = MSGSEND.IDBILLING WHERE IDHANDLESTATUS = 0 AND IDGATEWAY = 4 AND SENDDATETIME < GETDATE() ORDER BY PRIORITY DESC, SENDDATETIME;
La table SMSSEND comporte un index sur sa clé primaire et un autre index IDX_SMSSEND_SENDDATETIME_IDHANDLESTATUS_IDGATEWAY. Actuellement cette requête ramène évidemment 50 lignes, mais le nombre de lignes de la table qui matchent cette requête est 23, la table en contient 7326.
La table SMSBILLING ne comporte seulement un index de clé primaire sur l'IDBILLING.
Elle me fait 46 logical reads sur SMSBILLING et 110 logical reads sur SMSSEND, ce qui est beaucoup trop.
J'ai essayé plusieurs indexes, sans parvenir à obtenir mieux ...
Comment faire ?![]()
Partager