Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [MySql] Ordinamento non corretto

    Ciao a tutti,
    ho problemi su un programma che utilizzo da mesi.
    Carico dei csv in una tabella tramite LOAD DATA LOCAL INFILE.
    Il csv contiene un campo IdRecord che fa da chiave nella tabella, si tratta di un progressivo univoco.
    Oggi per la prima volta ho avuto l'esigenza di eliminare dalla tabella l'ultimo csv, semplicemente con "delete from tabella where idrecord>=N".
    Poi da programma (con la solita procedura che utilizza LOAD DATA LOCAL INFILE) ho ricaricato il csv senza fare alcune modifiche. Le anagrafiche sono state caricate, ma se da MySql le visualizzo (Select * from tabella where idrecord>=N) le vedo con un ordinamento apparentemente casuale e non con la stessa sequenza di record del csv.

    Qualcosa mi sfugge...

    Tutti i record inseriti fino a ieri li vedo con la sequenza corretta,
    tutti i record in coda alla tabella, eliminati e reinseriti, li vedo con una sequenza casuale.

    Cosa può essere?

    Grazie
    Luciano

  2. #2
    Aggiungi ORDER BY idrecord

    I record nella tabella non sono ordinati ma vengono inseriti nel primo spazio libero trovato nel file.
    Usa order by per ordinare i record

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

  3. #3
    Speravo di evitare l'OREDER BY per motivi di performance in quanto la tabella contiene milioni di record.

    Ancora però non mi torna qualcosa.
    In tabella ho:
    codice:
    IdRecord - AltriDati
      1      -   A
      2      -   B
      3      -   A
    Tramite Load data infile aggiungo il seguente csv:
    4;C
    5;B
    6;B

    la tabella diventa:
    codice:
    IdRecord - AltriDati
      1      -   A
      2      -   B
      3      -   A
      4      -   C
      5      -   B
      6      -   B
    Fino ad oggi ho solo accodato e mai eliminato record
    Per vari motivi elimino i record del csv appena inserito, elimino quindi i record in coda alla tabella senza lasciare buchi
    delete from tabella where idrecord>=4

    La tabella diventa:
    codice:
    IdRecord - AltriDati
      1      -   A
      2      -   B
      3      -   A
    Rinserisco lo stesso csv utilizzando la stessa procedura

    la tabella diventa:
    codice:
    IdRecord - AltriDati
      1      -   A
      2      -   B
      3      -   A
      6      -   B
      4      -   C
      5      -   B
    da mesi uso il programma, mai avuto problemi.
    Solo ora che ho riaccodato dati in precedenza eliminati mi è successo questo.
    L'unica cosa che mi viene in mente è che non ho mai chiuso la connessione durante queste operazioni.

  4. #4
    quando elimini dei record dovresti ottimezzare la tabella in modo da eliminare lo spazio lasciato dai record tolti

    L'inserimento fisico dei record avviene in modo random e se ci sono spazi nel file non puoi controllarne l'inserimento

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

  5. #5
    Come per i file mdb (Pulisci e ottimizza il database)?
    Come si fa in MySql?

  6. #6
    Originariamente inviato da Luciano79
    Come per i file mdb (Pulisci e ottimizza il database)?
    Come si fa in MySql?
    ... o compatta e ripristina...?

  7. #7
    Originariamente inviato da Luciano79
    ... o compatta e ripristina...?
    OPTIMIZE TABLE nome_tabella

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

  8. #8
    Grazie!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.