Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [MySql] where con function

    salve,
    ho 2 server
    il primo con una vecchia release di mysql (5.0.qualcosa)
    se faccio un explain di una select tipo
    select a from table where b=function(data,idutente)

    mi dice che usa l'indice del campo B

    nel nuovo server con mysql 5.1.54 (quello del pacchetto di ubuntu server 11.04)
    la stessa select non usa più l'indice e mi scorre praticamente tutta la tabella impiegandoci circa 7 sec x l'esecuzione

    dove sta la differenza?
    www.contabilitafacile.it

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469

    Re: [MySql] where con function

    Originariamente inviato da Fumocamel
    dove sta la differenza?
    inizia a fare un mysqldump -d di entrambi i db

  3. #3
    mysqldump -d x notare le differenze?

    il nuovo server è il dump dei dati e della struttura del vecchio
    www.contabilitafacile.it

  4. #4

    Re: [MySql] where con function

    Originariamente inviato da Fumocamel
    dove sta la differenza?
    se si tratta di una funzione definita dall'utente dovresti leggere il manuale.

    http://dev.mysql.com/doc/refman/5.1/...ction-udf.html

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    ho letto il link inviato ma non ho trovato indicazioni particolari

    la mia funzione è la seguente:

    codice:
    DELIMITER $$
    
    USE `dbutente`$$
    
    DROP FUNCTION IF EXISTS `gldtipoimportoivaagviaggi`$$
    
    CREATE DEFINER=`root`@`%` FUNCTION `gldtipoimportoivaagviaggi`(inRec VARCHAR(30), intaglevel VARCHAR(30)) RETURNS VARCHAR(30) CHARSET latin1
        READS SQL DATA
    BEGIN
    DECLARE cherifgldpacchettituristici VARCHAR(30);
    DECLARE cherifgldgestionecontratti VARCHAR(30);
    DECLARE chetipooperazioneiva VARCHAR(30);
    DECLARE chericevutafiscale VARCHAR(30);
    DECLARE cherifglstypemodellicontabili VARCHAR(30);
    DECLARE cheinrec VARCHAR(30);
    SELECT glvars_read(inRec,'gldtipoimportoivaagviaggi') INTO cheinrec;
    	SELECT tipooperazioneiva, ricevutafiscale INTO chetipooperazioneiva, chericevutafiscale FROM gldgestionecontratti WHERE recid=cheinrec;
    	SELECT DISTINCT rifglstypemodellicontabili INTO cherifglstypemodellicontabili FROM glstypemodellicontabilifatturazione WHERE TipoDocumento=chericevutafiscale AND TipoReg=chetipooperazioneiva AND TagLevel=intaglevel
    	AND tipociclo='idriferimento' AND IF(TipoDocumento='RIC. FISCALE - CORRISP.',TRUE, tipofattura='VENDITA');
    RETURN cherifglstypemodellicontabili;
        END$$
    
    DELIMITER ;
    ed è identica nei due db
    www.contabilitafacile.it

  6. #6
    fai un controllo dell'upgrade delle tabelle.

    http://dev.mysql.com/doc/refman/5.1/...l-upgrade.html

    personalmente mi e' successo passando (ma mio errore perche' ho saltato la 5.1) da 5.0 a 5.5

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    credo di aver fatto tutti i check da voi proposti

    ma quella query è sempre stra lenta, il problema è che se fosse php
    saprei come ovviare, ma la query deve restare così purtroppo
    www.contabilitafacile.it

  8. #8
    Originariamente inviato da Fumocamel
    credo di aver fatto tutti i check da voi proposti

    ma quella query è sempre stra lenta, il problema è che se fosse php
    saprei come ovviare, ma la query deve restare così purtroppo
    non mi viene in mente nulla ... se non il charset latin1 che usi nella funzione.

    Potresti anche provare a ricreare (togli/metti) l'indice. Prova anche ad eseguire la query senza la funzione mettendo direttamente il valore cercato e verificare se l'uso dell'indice e' condizionato dalla funzione oppure no.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Originariamente inviato da piero.mac
    non mi viene in mente nulla ... se non il charset latin1 che usi nella funzione.

    Potresti anche provare a ricreare (togli/metti) l'indice. Prova anche ad eseguire la query senza la funzione mettendo direttamente il valore cercato e verificare se l'uso dell'indice e' condizionato dalla funzione oppure no.
    se metto il valore cercato la query usa gli indici

    senza no...
    www.contabilitafacile.it

  10. #10
    Originariamente inviato da Fumocamel
    se metto il valore cercato la query usa gli indici

    senza no...
    quindi il problema e' della funzione.

    Anche qui... cancellare e ricreare seguendo le istruzioni del manuale. Dai comunque prima una occhiata al character set. E' latin1 nella tabella oppure utf8 ???

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.