Visualizzazione dei risultati da 1 a 10 su 12

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2014
    residenza
    Genova, presenza costante a Milano
    Messaggi
    100
    Consiglio di:

    1) Trasformare il VARCHAR in un INT UNSIGNED, molto più piccolo e quindi più veloce. Se il motivo è che vuoi avere gli zeri a sinistra, puoi usare l'attributo ZEROFILL. Poi togli il *1 e il CAST().
    2) Consiglio che codice sia chiave primaria e di creare un indice su figlio (che implicitamente diventerebbe figlio + codice).
    3) Fare come altri ti hanno suggerito: fai una tabella di numeri da 1 a X e fai una JOIN tra quella tabella e articoli. Seleziona i numeri dalla tab ausiliaria ON numeri.codice = articoli.codice WHERE articoli.codice IS NULL AND articoli.figlio = 0.

    La UNION forse è meglio lasciarla (in teoria potresti semplicemente aggiungere una OR, ma non sono sicuro sul query plan).

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    ho dovuto modificare ulteriormente la query perché com'era non trovava il progressivo massimo, ma solo i buchi.
    i tempi della query non sono cambiati.

    2)codice è già primaria quindi ok.
    3) la tabella di numeri la sto testando, ma sembra più lenta che non avere una colonna temporanea. almeno per ora che i codici hanno un progressivo basso, probabilmente verso la fine ( 99.999 ) potrebbe essere vero il contrario.

    per il punto 1) purtroppo non posso cambiare in INT perché la tabella ospita piu tipi di dati.

    codice è un codice a barre.

    ci sono articoli vecchi il cui codice era "12345"
    ci sono i nuovi articoli il cui codice è "00012.1234.1234.00005" dove ogni sezione indica qualcosa
    (es. articolo.colore.marca.progressivo)

    il problema è che se trasformo il campo in un INT unsigned ZERO FILL
    i codici vecchi diverrebbero 00000.0000.0000.12345 (uso i punti per una facile lettura ma non andrebbero)

    e ricercandoli poi ci sarebbero dei problemi con il tempo perché
    12345 può essere sia un codice di un articolo finale che il codice articolo identificativo.
    si potrebbe cadere in errore.

    specie perchè chi mi ha inserito gli articoli prima, ha inserito l'articolo "1" e l'articolo "0001"

    valuterò meglio la gestione della tabella e la join.

    grazie per il consiglio

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2014
    residenza
    Genova, presenza costante a Milano
    Messaggi
    100
    Allora provo a darti qualche altro consiglio

    1) Non puoi aggiungere gli 0 in tabella (invece di aggiungerli nelle SELECT) e usare CHAR?
    2) La tabella dei numeri puoi farla di tipo MEMORY.
    3) Visto che non puoi usare un INT, puoi usare il charset ASCII, almeno hai 1 byte per carattere.
    4) Qualunque cosa tu decida, numeri.codice dovrebbe essere dello stesso tipo (e charset) di articoli.codice
    5) Se la join continua a essere lenta, fai una EXPLAIN e postala qui, vediamo cosa c'è che non va.

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.