Melhorando a Performance de Consultas no Totvs Protheus – Parte 4
Fala pessoal, Antes de lerem esse post, caso ainda não tenham lido os anteriores, sugiro que façam para seguirem a linha de raciocínio: https://www.fabriciolima.net/blog/2017/12/11/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-1/ https://www.fabriciolima.net/blog/2017/12/18/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-2/ https://www.fabriciolima.net/blog/2018/01/08/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-3/ Pegando mais uma query no Traces de queries demoradas. Essa query está demorando 18 segundos e fazendo um número absurdo de leituras na tabela SF2090. Query:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61  | 
						SELECT   A1_COD ,          A1_LOJA ,          A1_NOME ,          F2_DOC ,          F2_SERIE ,          CONVERT(DATE, F2_EMISSAO) AS F2_EMISSAO ,          ZZB_VOLUME ,          SA4.A4_COD ,          SA4.A4_NOME ,          SA1.A1_END ,          SA1.A1_COMPLEM ,          SA1.A1_BAIRRO ,          SA1.A1_EST ,          SA1.A1_MUN ,          SA1.A1_CEP ,          A1_CGC ,          SA1.A1_TEL ,          SA1.A1_DDD ,          A1_EMAIL ,          ZZB.ZZB_RASTRO ,          A4_YSERVIC ,          SF2.F2_VALBRUT ,          SF2.F2_VOLUME1 ,          VT1_API ,          VT1_ORDID ,          VT1_SEQUEN ,          F2_PBRUTO * 1000 F2_PBRUTO FROM     SF2090 SF2          JOIN SA1040 SA1 ON A1_FILIAL = '  '                             AND SA1.D_E_L_E_T_ = ' '                             AND SA1.A1_COD = SF2.F2_CLIENTE                             AND SA1.A1_LOJA = SF2.F2_LOJA          JOIN SA4090 SA4 ON A4_FILIAL = '  '                             AND SA4.D_E_L_E_T_ = ' '                             AND SA4.A4_COD = SF2.F2_TRANSP          JOIN ZZB090 ZZB ON ZZB_FILIAL = '01'                             AND ZZB.D_E_L_E_T_ = ' '                             AND ZZB.ZZB_DOC = SF2.F2_DOC                             AND ZZB.ZZB_SERIE = SF2.F2_SERIE          JOIN SC5090 SC5 ON C5_FILIAL = '01'                             AND SC5.D_E_L_E_T_ = ' '                             AND SF2.F2_DOC = SC5.C5_NOTA                             AND SF2.F2_SERIE = SC5.C5_SERIE          LEFT JOIN VT1090 VT1 ON VT1_FILIAL = '01'                                  AND VT1.D_E_L_E_T_ = ' '                                  AND SC5.C5_NUM = VT1.VT1_NUMPED          OUTER APPLY (   SELECT TOP 1 *                          FROM   VT4090 VT4                          WHERE  VT4_FILIAL = '01'                                 AND VT4.D_E_L_E_T_ = ' '                                 AND VT4.VT4_ORDID = VT1.VT1_ORDID                                 AND VT4_EMPFOR + VT4_FILFOR = '23234'                      ) VT4 WHERE    SF2.F2_FILIAL = '01'          AND SF2.D_E_L_E_T_ = ' '          AND SF2.F2_TIPO = 'N'          AND SF2.F2_EMISSAO >= '20170315'          AND SF2.F2_TRANSP IN ( '34534534', '34534534', '3453454' )          AND ZZB.ZZB_PLP = ' ' ORDER BY ZZB.ZZB_RASTRO DESC ,          F2_DOC;  | 
					
Leituras:
| 
					 1 2 3 4 5 6 7 8 9  | 
						Table 'VT1090'. Scan count 0, logical reads 0 Table 'SA1040'. Scan count 0, logical reads 0 Table 'SF2090'. Scan count 1168821, logical reads 3725643 Table 'SC5090'. Scan count 1, logical reads 4316 Table 'ZZB090'. Scan count 1, logical reads 149 Table 'SA4090'. Scan count 1, logical reads 13  SQL Server Execution Times:    CPU time = 15906 ms,  elapsed time = 18008 ms.  | 
					
[…]
