SEARCH IN LARGE DATABASE VERY SLOW

SEARCH IN LARGE DATABASE VERY SLOW

Postby INFORMAISVRB » Tue Nov 22, 2022 8:44 pm

SEARCH IN LARGE DATABASE VERY SLOW

hello everyone
I have a survey, I will post it in full.
this database has something close to 12,188 records

Code: Select all  Expand view  RUN


*-------------------------------------------------------------------------------
*
*-------------------------------------------------------------------------------
FUNCTION LOCALIZA_NBM_NCM()
    Cursor("SQL")
    X                       := .T.
    PROCURA_PESQUISA            := SPACE(40)
    cOrder                      := 'A'  
    T_CODI_CFOP                 :=  SPACE(05)
    T_CAMPO_ORDENAR         :='COD_NCM'
    uRetCol                     := 1       
    T_SO_INATIVOS               := (.F.)           
    *----------------------------------------------------------------------------
    IF SELECT("nbm_ncm") != 0
        nbm_ncm->(DbCloseArea())
    ENDIF      
    cQuery:='select * from nbm_ncm order by COD_NCM '
    use sql cQuery alias "nbm_ncm" new via 'MYSQL'
    nbm_ncm->( DbGoTop())
    *----------------------------------------------------------------------------
    T_TXT_DIALOGO   := ' Pesquisa de Ncm Classificação Fiscal'

    DEFINE DIALOG oPES_CFOP RESOURCE "PESQUISA_SQL_INCREMENTAL" TITLE "...:: Pesquisa ::..." Font O_F_DLG
    oPES_CFOP:lHelpIcon:=.F.  
    REDEFINE SAY oT_TXT_DIALOGO                     var T_TXT_DIALOGO     ID 4052           OF oPES_CFOP  FONT O_F_GET COLOR CLR_LWHITE,CLR_BFOOT  Update
    T_TXT_DIALOGO2  := ' '
    REDEFINE SAY oT_TXT_DIALOGO2                        var T_TXT_DIALOGO2  ID 4001             OF oPES_CFOP  FONT O_F_GET COLOR CLR_LWHITE,CLR_BFOOT  Update
    *----------------------------------------------------------------------------
    oDbx_NCM                                    := TXBrowse():New( oPES_CFOP )
    oDbx_NCM:cAlias                         := "nbm_ncm"
    oDbx_NCM:bKeyDown                       :={|nKey|  if(nkey=13,(     T_CODI_CLASSIFICACAO := nbm_ncm->COD_NCM, oPES_CFOP:End() ),) }
    oDbx_NCM:bChange                        :={||                           T_CODI_CLASSIFICACAO := nbm_ncm->COD_NCM }
    oDbx_NCM:bLDblClick                     :={||                           T_CODI_CLASSIFICACAO := nbm_ncm->COD_NCM, oPES_CFOP:End() }
    *----------------------------------------------------------------------------   
    oDbx_NCM:lColDividerComplete            := .T.
    oDbx_NCM:lFooter                        := .T.
    oDbx_NCM:lRecordSelector                := .T.  
    oDbx_NCM:nHeaderLines                   := 2
    oDbx_NCM:nDataLines                     := 2.5
    oDbx_NCM:bClrStd                            := {|| { IF(nbm_ncm->FINAL_VIGENCIA<=DATE(),CLR_VERMELHO,CLR_BLACK), IIF(((oDbx_NCM:cAlias)->(ORDKEYNO()))%2==0, COR_1_bClrStd , COR_2_bClrStd  )}}
    oDbx_NCM:bClrSelFocus                   := {|| { M->COR_1_bClrSelFocus, M->COR_2_bClrSelFocus  } }        
    oDbx_NCM:bClrRowFocus                   := {|| { M->COR_1_bClrRowFocus, M->COR_2_bClrRowFocus   } }
    oDbx_NCM:nColDividerStyle               := 4
    oDbx_NCM:nRowDividerStyle               := 4
    oDbx_NCM:nMarqueeStyle                  := 4
    oDbx_NCM:nFooterLines                   := 1
    oDbx_NCM:lAllowColSwapping              := .T.                                 //  Click no header (.f.)Trava
    oDbx_NCM:lAllowRowSizing                := .T.                                 //  Nao move as Linhas (nao sei) 
    oDbx_NCM:l2007                          := M->ESTILO_l2007
    oDbx_NCM:lAllowRowSizing                := .T.
[b] oDbx_NCM:lSeekWild                          := .T.
    oDbx_NCM:lIncrFilter                    := .T. // Liga o Filtro incremental    
    oDbx_NCM:nColSel                            := 1   // Jogar o Foco na Segunda coluna
[/b]    *----------------------------------------------------------------------------   
    oCol                                            := oDbx_NCM:AddCol()
    oCol:bStrData                           := { || nbm_ncm->COD_NCM }
    oCol:cHeader                            := "Cód"
    oCol:cFooter                            := " "
    oCol:cToolTip                           := {"Código NCM","Ajuda","",  }
    oCol:nDataStrAlign                      := AL_LEFT
    oCol:nHeadStrAlign                      := AL_LEFT
    oCol:bLClickHeader                      := {|r,c,f,o| ( oDbx_NCM:cFilterFld := 'COD_NCM', PROCURA_CLASSIFICACAO_FISCAL(cOrder,'COD_NCM',oDbx_NCM:MouseColPos( c ),T_SO_INATIVOS )    )}
   oCol:cSortOrder                          := 'COD_NCM'
   oCol:oDataFont                           := O_F_DLG2 
    oCol:oHeaderFont                            := O_F_GET     
    *-------------------------------------------------------------------------
   oCol                                             := oDbx_NCM:AddCol()
   oCol                                         :AddResource("#8411")
   oCol                                         :AddResource("#8462")
   oCol:bBmpData                            := { || IIf(nbm_ncm->COBRANCA_MONOFASICA="S", 1, 2) }
   oCol:cHeader                             := "Monof."
   oCol:cFooter                             := ""
   oCol:nDataStrAlign                       := AL_LEFT
   oCol:nHeadStrAlign                       := AL_LEFT
    oCol:bLClickHeader                      := {|r,c,f,o| ( oDbx_NCM:cFilterFld := 'COBRANCA_MONOFASICA', PROCURA_CLASSIFICACAO_FISCAL(cOrder,'COBRANCA_MONOFASICA',oDbx_NCM:MouseColPos( c ),T_SO_INATIVOS )    )}
   oCol:cSortOrder                          := 'COBRANCA_MONOFASICA'
    oCol:cToolTip                           := {"Aliquota de Pis/Cofins Monofásica","Ajuda","",  }
    oDbx_NCM:aCols[02]:oHeaderFont      := oFont1  
    *-------------------------------------------------------------------------     
    oCol                                            := oDbx_NCM:AddCol()
    oCol:bStrData                           := { || TRANSFORM(nbm_ncm->ALIQUOTA_NACIONAL    ,"@E 999.99")+ '%' }
    oCol:cHeader                            := 'Nacional'
    oCol:cFooter                            := " "
    oCol:cToolTip                           := {"Aliquota de Imposto IBPT (Nacional)","Ajuda","",  }
    oCol:nDataStrAlign                      := AL_RIGHT
    oCol:nHeadStrAlign                      := AL_LEFT
    oCol:bLClickHeader                      := {|r,c,f,o| ( oDbx_NCM:cFilterFld := 'ALIQUOTA_NACIONAL', PROCURA_CLASSIFICACAO_FISCAL(cOrder,'ALIQUOTA_NACIONAL',oDbx_NCM:MouseColPos( c ),T_SO_INATIVOS )    )}
   oCol:cSortOrder                          := 'ALIQUOTA_NACIONAL'
    oDbx_NCM:aCols[03]:AddResource( "#8463" )
    oDbx_NCM:aCols[03]:nBtnBmp              := 1
    oDbx_NCM:aCols[03]:nEditType            := EDIT_BUTTON
   oDbx_NCM:aCols[03]:bEditBlock        := {|nRow, nCol, oCol|  ( MsgInfo('Aliquota IBPT Nacional !',M->SISTEMA)  )  }
    oDbx_NCM:aCols[03]:lBtnTransparent  := .T.
    oDbx_NCM:aCols[03]:lBmpStretch          := .F.
    *----------------------------------------------------------------------------   
    oCol                                            := oDbx_NCM:AddCol()
    oCol:bStrData                           := { || TRANSFORM(nbm_ncm->ALIQUOTA_IMPORTACAO  ,"@E 999.99")+ '%' }
    oCol:cHeader                            := 'Impot.'
    oCol:cFooter                            := " "
    oCol:cToolTip                           := {"Aliquota de Imposto IBPT (Importação)","Ajuda","",  }
    oCol:nDataStrAlign                      := AL_RIGHT
    oCol:nHeadStrAlign                      := AL_LEFT
    oCol:bLClickHeader                      := {|r,c,f,o| ( oDbx_NCM:cFilterFld := 'ALIQUOTA_IMPORTACAO', PROCURA_CLASSIFICACAO_FISCAL(cOrder,'ALIQUOTA_IMPORTACAO',oDbx_NCM:MouseColPos( c ),T_SO_INATIVOS )    )}
    oCol:cSortOrder                             := 'ALIQUOTA_NACIONAL'
    oDbx_NCM:aCols[04]:AddResource( "#8464" )
    oDbx_NCM:aCols[04]:nEditType            := EDIT_BUTTON
   oDbx_NCM:aCols[04]:bEditBlock        := {|nRow, nCol, oCol|  ( MsgInfo('Aliquota IBPT Para Importação !',M->SISTEMA)  )  }
    oDbx_NCM:aCols[04]:nBtnBmp              := 1
    oDbx_NCM:aCols[04]:lBtnTransparent  := .T.
    oDbx_NCM:aCols[04]:lBmpStretch          := .F.
    *------------------------------------------------------------------------- 
    WITH OBJECT oDbx_NCM
       :SetGroupHeader( "Impostos Ibpt" ,    03, 04,        O_F_CAB_XBROWSE)
    END  
    *-------------------------------------------------------------------------
    oCol                                            := oDbx_NCM:AddCol()
    oCol:bStrData                           := { || TokenUpper( Lower( TiraAcento( nbm_ncm->NOME_NCM )), " w")   }
    oCol:cHeader                            := "Nome/Descrição"
    oCol:cFooter                            := " "
    oCol:cToolTip                           := {"Descrição","Ajuda","",  }
    oCol:nDataStrAlign                      := AL_LEFT    
    oCol:nHeadStrAlign                      := AL_LEFT
    oCol:bLClickHeader                      := {|r,c,f,o| ( oDbx_NCM:cFilterFld := 'NOME_NCM', PROCURA_CLASSIFICACAO_FISCAL(cOrder,'NOME_NCM',oDbx_NCM:MouseColPos( c ),T_SO_INATIVOS )    )}
   oCol:cSortOrder                          := 'NOME_NCM'
   oDbx_NCM                                     :aCols[05]:nWidth := 600
    *------------------------------------------------------------------------- 
    oCol                                            := oDbx_NCM:AddCol()
    oCol:bStrData                           := { || DTOC(nbm_ncm->INICIO_VIGENCIA) +CRTLF+ DTOC(nbm_ncm->FINAL_VIGENCIA)}
    oCol:cHeader                            := "Vigência"
    oCol:cFooter                            := " "
    oCol:cToolTip                           := {"Período de Vigênci","Ajuda","",  }
    oCol:nDataStrAlign                      := AL_LEFT    
    oCol:nHeadStrAlign                      := AL_LEFT
    *------------------------------------------------------------------------- 
    oCol                                            := oDbx_NCM:AddCol()
    oCol:bStrData                           := { || nbm_ncm->VERSAO_TABELA }
    oCol:cHeader                            := "Versão"
    oCol:cFooter                            := " "
    oCol:cToolTip                           := {"Versão da Tabela de Ncm (IBPT)","Ajuda","",  }
    oCol:nDataStrAlign                      := AL_LEFT    
    oCol:nHeadStrAlign                      := AL_LEFT
    *------------------------------------------------------------------------- 
    oCol                                            := oDbx_NCM:AddCol()
    oCol:bStrData                           := { || DTOC(nbm_ncm->ULTIMA_ATUALIZACAO)  }
    oCol:cHeader                            := "Ultima Atualização"
    oCol:cFooter                            := " "
    oCol:cToolTip                           := {"Data da Ultima Atualização","Ajuda","",  }
    oCol:nDataStrAlign                      := AL_LEFT    
    oCol:nHeadStrAlign                      := AL_LEFT
   *----------------------------------------------------------------------------
    oDbx_NCM:CreateFromResource(4015)
    *----------------------------------------------------------------------------
    WITH OBJECT oDbx_NCM
      :cFilterFld       := "COD_NCM"
      :bKeyDown         := { |nKey| If( nKey == VK_RETURN, (  uRet := oDbx_NCM:oCol( uRetCol ):Value, oPES_CFOP:End() ), nil ) }
      :bKeyChar         := { |nKey| If( nKey == VK_ESCAPE, ( oDbx_NCM:Seek( "" ), oPES_CFOP:End() ), nil ) }
      :bLDClickDatas    := { || uRet := oDbx_NCM:oCol( uRetCol ):Value, oPES_CFOP :End() }  
      :AutoFit()
   END
   REDEFINE SAY oDbx_NCM:oSeek var oDbx_NCM:cSeek                                       ID 4002  PICTURE "@!" OF oPES_CFOP COLOR CLR_PRETO, CLR_VD_CALRO  FONT O_F_GET 
    *----------------------------------------------------------------------------
    REDEFINE BUTTONBMP oSair_pesquisa                                               ID 4008         OF oPES_CFOP ACTION ( oPES_CFOP:end()  ) BITMAP "#8019" PROMPT "&Fechar" TEXTRIGHT
    REDEFINE BUTTONBMP oExp_excel                                                       ID 4016         OF oPES_CFOP ACTION ( oDbx_NCM:ToExcel()   )   BITMAP (M->BTN_EXPORTA_EXCEL) PROMPT "Ex&cel" TEXTRIGHT
    oExp_excel              :   cToolTip := {"Exportar para"+CRLF+"o Microsoft® Excel","Ajuda","", }   
   *----------------------------------------------------------------------------
    ACTIVATE DIALOG oPES_CFOP CENTERED
RETURN .T.

*----------------------------------------------------------------------------------------------------------------------------
Function PROCURA_CLASSIFICACAO_FISCAL(v_Ordenacao,v_Campo_Ordenar,v_Num_Col,v_Tipo_Filtro)
    Default v_Tipo_Filtro:=.F.
    DEFAULT v_Ordenacao         :="A"
    DEFAULT v_Campo_Ordenar     :="COD_NCM"
    DEFAULT v_Num_Col           := 1
    IF v_Ordenacao = 'A'
        cOrder := 'D'
    ELSE
        cOrder := 'A'
    ENDIF      
    *----------------------------------------------------------------------------
    IF SELECT("nbm_ncm") != 0
        nbm_ncm->(DbCloseArea())
    ENDIF      
    cQuery :=   ' SELECT  * FROM nbm_ncm'
    IF v_Tipo_Filtro = (.T.)
        cQuery += ' WHERE  FINAL_VIGENCIA = ' + TRANSFORMA_SQL(CTOD(''),'D',08,0)
    ENDIF   
    cQuery += ' ORDER BY ' + ALLTRIM(v_Campo_Ordenar)  + IF(v_Ordenacao='A',' DESC',' ASC')
    use sql cQuery alias "nbm_ncm" new via 'MYSQL'
    nbm_ncm->( DbGoTop())

    oDbx_NCM:oHeaderFonts                           := O_F_DLG
    oDbx_NCM:nColSel                                := (v_Num_Col)  
    oDbx_NCM:oCol(  (v_Num_Col) ):oHeaderFont   := O_F_GET
    oDbx_NCM                                                :GoTop()
    oDbx_NCM                                                :Refresh()
    oDbx_NCM                                                :RefreshHeaders()    
    oDbx_NCM                                            : SetFocus()            
Return(.t.)


 
INFORMAISVRB
 
Posts: 51
Joined: Tue Mar 23, 2010 12:53 pm

Re: SEARCH IN LARGE DATABASE VERY SLOW

Postby Marc Venken » Wed Nov 23, 2022 7:29 am

Marc Venken
Using: FWH 23.04 with Harbour
User avatar
Marc Venken
 
Posts: 1442
Joined: Tue Jun 14, 2016 7:51 am
Location: Belgium

Re: SEARCH IN LARGE DATABASE VERY SLOW

Postby nageswaragunupudi » Sun Nov 27, 2022 9:48 am

Mr. INFORMAISVRB

What is the FWH version you are using?
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: SEARCH IN LARGE DATABASE VERY SLOW

Postby INFORMAISVRB » Mon Nov 28, 2022 6:21 pm

Hello

Look
Last edited by INFORMAISVRB on Wed Jan 11, 2023 2:21 pm, edited 1 time in total.
INFORMAISVRB
 
Posts: 51
Joined: Tue Mar 23, 2010 12:53 pm

Re: SEARCH IN LARGE DATABASE VERY SLOW

Postby nageswaragunupudi » Tue Nov 29, 2022 1:19 am

I guess you are using SQLRDD.
If I am right, please try this small code for testing purposes and let us know the result:

After this code:
Code: Select all  Expand view  RUN
   cQuery:='select * from nbm_ncm order by COD_NCM '
    use sql cQuery alias "nbm_ncm" new via 'MYSQL'
    nbm_ncm->( DbGoTop())
 


simply add this line:
Code: Select all  Expand view  RUN
XBROWSER "nbm_ncm" AUTOSORT
return nil


Please let us know if you see the browse.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: SEARCH IN LARGE DATABASE VERY SLOW

Postby INFORMAISVRB » Tue Nov 29, 2022 5:36 pm

Hello


SOLVED, THROWING EVERYTHING IN ARRAY

Thank you all
INFORMAISVRB
 
Posts: 51
Joined: Tue Mar 23, 2010 12:53 pm

Re: SEARCH IN LARGE DATABASE VERY SLOW

Postby Marc Venken » Tue Nov 29, 2022 8:43 pm

Tja... I did not consider putting it all in a array because I'm not used programming in array

but since array is in memory, it would be much faster that the dbf version. I wonder for my purposes.

I have to reread xbrowse systems for better use with array. Not sure that I will go that way....

Who has information about the RDD (CDX) filtering techniques ? Mr. Rao wrote that this is one of the most important speed issues in xbrowse when not done the best way.
Marc Venken
Using: FWH 23.04 with Harbour
User avatar
Marc Venken
 
Posts: 1442
Joined: Tue Jun 14, 2016 7:51 am
Location: Belgium

Re: SEARCH IN LARGE DATABASE VERY SLOW

Postby INFORMAISVRB » Wed Nov 30, 2022 2:21 am

Hello, Marc Venken,
thank you very much for your reply.

I'm using "MariaDb", which is similar to "mysql"

Using it with an Array was very fast, even with a base of 11,000 Reg


If needed, post an example.
A friend "Marcelo", here in Brazil, helped me to solve it.
Credits for the solution belong to him, but I adjusted my reality and it turned out great
INFORMAISVRB
 
Posts: 51
Joined: Tue Mar 23, 2010 12:53 pm


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: Timm Sodtalbers and 61 guests