Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Cheope
    Registrato dal
    Dec 2003
    Messaggi
    327

    [MySQL] Chiarimenti su campi indicizzati

    Rivolto agli intimi conoscitori delle dinamiche interne di MySQL.
    Che voi sappiate, la posizione dei campi con indici all'interno della tabella può influrire sulla velocità di esecuzione di query SELECT? Faccio un esempio.
    codice:
    CREATE TABLE articoli (    
      id int(10) unsigned NOT NULL auto_increment,
      titolo varchar(100) NOT NULL default '',
      testo blob, 
      id_autore int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (id),
      KEY id_autore (id_autore) 
    );
    Avendo un indice sul campo id_autore, sarebbe meglio spostarlo a inizio tabella, dopo la chiave primaria, oppure non cambia niente?

    Altra domanda.
    Se io ho una tabella con due campi indicizzati, e faccio una query select che ad esempio li contempla entrambi nella clausola where, la query viene ottimizzata partendo dal primo indice specificato nella tabella, oppure in base alla "rilevanza" di un indice, es un campo numerico indicizzato è sicuramente più veloce da scorrere di un campo di testo indicizzato anche solo parzialmente...

    Grazie a tutti!


    /* Let's Lead the Web to Its Full Potential */

  2. #2
    1) Penso sia indifferente.

    2) usa EXPLAIN e vedi se e come una chiave viene utilizzata.

    codice:
    EXPLAIN SELECT *
            FROM tabella
            WHERE campo like 'pippo'

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

  3. #3
    Utente di HTML.it L'avatar di Cheope
    Registrato dal
    Dec 2003
    Messaggi
    327
    Sì, so che explain spiega se e quali chiavi vengono usate e soprattutto quali campi potrebbero essere chiavi potenziali.
    Volevo solo sapere se la precedenza è data dall'ordine della dichiarazione delle chiavi all'interno della tabella, oppure dalla "comodità" di una o l'altra chiave.
    Il dubbio mi è venuto usando SQL Yog: quando creo degli indici, nell'interfaccia grafica c'è la possibilità di riordinare le colonne spostandole in alto o in basso. E proprio il fatto che questa funzione venga proposta qui invece che nell'alter table mi ha fatto pensare che l'ordine dei campi inidicizzati giocasse qualche ruolo...
    :master:
    /* Let's Lead the Web to Its Full Potential */

  4. #4
    il riordinare le colonne secondo un certo criterio utilizza il ORDER BY. un select * con order by di solito usa SORT e non l'indice.

    L'indice serve parecchio nelle ricerche mirate e quindi con WHERE. Invece di scorrere la tabella punta direttamente ai record interessati. Se la tabella e' grande la prestazione e' notevolmente migliorata.

    Se intendi dire un indice su piu' campi ... dipende dai campi, dalla priorita' del campo dipende la performance. Potresti anche appesantire di molto gli INSERT ed il DELETE per esempio. Non c'e' una regola fissa, dipende sempre dal contesto in cui operi.

    Per esempio un indice su "nome, cognome" con ordinamento su "cognome, nome" oppure lo stesso indice su un "where eta' = tot " non verra' mai utilizzato, in compenso appesantira' tutti gli insert.


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

  5. #5
    Utente di HTML.it L'avatar di Cheope
    Registrato dal
    Dec 2003
    Messaggi
    327
    Quindi secondo te l'ordine in cui compaiono i campi o gli indici in una tabella non può influire sulla velocità di una query SELECT, ma solo la scelta di uno o l'altro indice...
    Capito!
    Ciao e Grazie
    /* Let's Lead the Web to Its Full Potential */

  6. #6
    Originariamente inviato da Cheope
    Quindi secondo te l'ordine in cui compaiono i campi o gli indici in una tabella non può influire sulla velocità di una query SELECT, ma solo la scelta di uno o l'altro indice...
    Capito!
    Ciao e Grazie
    a dir la verita' ora non capisco piu' che intendi dire per ordine in cui compaiono i campi.

    indice pippo (campo1, campo2) e' diverso da
    indice pippo (campo2, campo1)

    influisce certamente, mentre

    indice pippo1 (campo1)
    indice pippo2 (campo2)

    sono indici diversi e poco importa se e' scritto prima uno e poi l'altro. Verra' utilizzato quando possibile quello piu' probabile.


    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.