sexta-feira, 13 de dezembro de 2013

Indices em MySql

Índices em MySql são necessários para a performance do banco.

Uma boa forma de verificar esta performance e qual índice o banco está utilizando, é colocar EXPLAIN antes da query a ser executada no seu manipulador de banco preferido.

Abaixe um pequeno exemplo de como criar/recriar índices:

PSQL_Index(xBanco,'tabela','idx_nome_indice',{'campo1','campo2'},Arg1)


**-----------------------------------------------------------------------------**
**  Finalidade: criar indices nativos no banco de dados
**  Parametros: Conexao       = Qual banco vai conectar
**              Tabela        = tabela que vai criar os indices
**              Indice        = Nome do indice que vai ser criado
**              Campos        = Campos no indice
**              DeletaIndices = .t. (apaga) ou .f. (nao apaga)
**-----------------------------------------------------------------------------**
    FUNCTION PSQL_Index(Conexao,Tabela,Indice,Campos,DeletaIndices)
    #include 'fivewin.ch'
**-----------------------------------------------------------------------------**
    **--[ verifica se vai deletar os indices existentes ]--**
    IF(DeletaIndices)
        SQL EXECUTE ("ALTER TABLE `"+Lower(tabela)+"` DROP INDEX `"+Lower(indice)+"`") INTO (conexao)
    ENDIF

    **--[ cria indices se nao existente ]--**
    IF(At(indice,ToString(SQLArray("SHOW INDEX FROM "+tabela,,Conexao)))==0)
        cCampo:=''
        FOR X = 1 TO Len(Campos)
            IF(Len(Campos)== X)
                cCampo+=Lower(Campos[X])
            ELSE
                cCampo+=Lower(Campos[X])+","
            ENDIF
        NEXT
        cCmd:="CREATE INDEX "+Lower(AllTrim(Indice))+" ON "+Lower(AllTrim(tabela))+" ("+AllTrim(cCampo)+")"
        PSQL_Execute(conexao,cCmd,Tabela)
    ENDIF
    RETURN(NIL)