Bonjour,
J'ai un comportement que je ne m explique pas avec un "IF EXISTS": celui-ci prend plusieurs minutes d'exécution... alors que "SELECT @Counter" + "IF @Counter..." ne prend que quelques millisecondes.
PS:Le script "SELECT ..." est exactement le même (copier/coller)
Code "IF EXISTS":
(> 9 minutes !)
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
19
20
21
22 IF EXISTS (SELECT NULL FROM AVGV300 WITH (NOLOCK) INNER JOIN PRMD000 sk WITH (NOLOCK) ON sk.RECORDID = AVGV300.REF_RECID AND AVGV300.FELDNAME = 'ZeichnungGedruckt' INNER JOIN CTI_Trig_PRMD0x0 ae WITH (NOLOCK) ON ae.BDE_NR = sk.BDE_NR AND ae.TableName = 'PRMD000' WHERE ISNULL(AVGV300.PAR_VALUE, '0.0') <> '10.0' AND sk.Auftrag NOT LIKE '60%' AND LTRIM(RTRIM(ISNULL(sk.Zeichnung, ''))) <> '' AND (ISNULL(ae.Zeichnung_N, '') <> ISNULL(ae.Zeichnung_O, '') OR ISNULL(ae.Zeich_Idx_N, '') <> ISNULL(ae.Zeich_Idx_O, '') ) AND ISNULL(AVGV300.DAT_AEN, AVGV300.DAT_NEU) IS NOT NULL AND ae.InsertDate IS NOT NULL AND ae.InsertDate > ISNULL(AVGV300.DAT_AEN, AVGV300.DAT_NEU) ) BEGIN PRINT 'Exists...' END ELSE BEGIN PRINT 'Not exists...' END
Code "SELECT @Counter" + "IF @Counter...":
(< 1 seconde)
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
19
20
21
22
23
24 DECLARE @Counter INTEGER SELECT @Counter = COUNT(*) FROM AVGV300 WITH (NOLOCK) INNER JOIN PRMD000 sk WITH (NOLOCK) ON sk.RECORDID = AVGV300.REF_RECID AND AVGV300.FELDNAME = 'ZeichnungGedruckt' INNER JOIN CTI_Trig_PRMD0x0 ae WITH (NOLOCK) ON ae.BDE_NR = sk.BDE_NR AND ae.TableName = 'PRMD000' WHERE ISNULL(AVGV300.PAR_VALUE, '0.0') <> '10.0' AND sk.Auftrag NOT LIKE '60%' AND LTRIM(RTRIM(ISNULL(sk.Zeichnung, ''))) <> '' AND (ISNULL(ae.Zeichnung_N, '') <> ISNULL(ae.Zeichnung_O, '') OR ISNULL(ae.Zeich_Idx_N, '') <> ISNULL(ae.Zeich_Idx_O, '') ) AND ISNULL(AVGV300.DAT_AEN, AVGV300.DAT_NEU) IS NOT NULL AND ae.InsertDate IS NOT NULL AND ae.InsertDate > ISNULL(AVGV300.DAT_AEN, AVGV300.DAT_NEU) SELECT @Counter IF @Counter > 0 BEGIN PRINT 'Exists...' END ELSE BEGIN PRINT 'Not exists...' END
Je travaille sur SQL-Server 2008 (Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) Jul 9 2008 14:17:44 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) )
Quelqu'un peut il m'expliquer ?
Merci d'avance
(AVGV300 -> 17780 rows ; CTI_Trig_PRMD0x0 -> 293.788 rows)
Partager