Visualizzazione risultati 1 fino 4 di 4

Discussione: [MySQL] Cosa comporta non definire un indice ( primary key ) ?

  1. #1
    Guest

    Predefinito [MySQL] Cosa comporta non definire un indice ( primary key ) ?

    Salve, come ho scritto nel titolo mi è sorto questo dubbio.
    Leggendo varie guide ho capito che definire un indice aumenta appunto l'indicizazzione della tabella sul campo definito come indice.

    Ma se io non ne avessi bisogno? Ci perdo qualcosa?

    Per non cadere in errore, vi posto la struttura della mia tabella:
    Codice:
    CREATE TABLE IF NOT EXISTS `comments` (
      `id` int(10) NOT NULL default '0',
      `text` text NOT NULL,
      `time` int(10) NOT NULL default '0'
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
    In poche parole questa tabella contiene i commenti riferiti all'articolo:
    Codice:
    id|text|time
    1|Commento dell'articolo 1|timestamp
    1|Altro commento dell'articolo 1|timestamp
    ...
    Dato che un indice è univoco qui non posso definirlo!
    Secondo voi devo modificare la struttura della tabella?
    Potete darmi dei consigli? Grazie!
    Ultima modifica di shorten : 03-10-2010 alle ore 14.21.09

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Una piccola precisazione: il concetto di "indice" è decisamente più debole rispetto a quello di "chiave primaria". Mentre per quest'ultima non sono ammessi duplicati in nessun modo (perché la loro funzione è quella di identificare un record), per l'indice sono ammessi, in quanto il loro scopo è solamente quello di velocizzare le ricerche.

    Normalmente si dovrebbero creare gli indici sulle chiavi primarie (questo MySQL lo fa in automatico) e sulle chiavi esterne (che in MySQL sono implementate solo con il motore InnoDB, non disponibile su AlterVista).

    Chiusa questa premessa, puoi benissimo definire una tabella senza chiave primaria, se non riesci a stabilirne una. In questo caso, sappi però che sono ammessi record duplicati nella tabella (intendo dire record con gli stessi valori su tutti i campi): se vuoi evitare questo, puoi sempre includere tutti gli attributi della tabella nella chiave primaria...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    Guest

    Predefinito

    Ok, grazie per il chiarimento.
    Sapevo che definendo come chiave primaria un campo non avrei la possibilità di inserire duplicati.

    Ma grazie a questo ho capito che si sono 4 diversi tipi di indici ( primary, index, unique, fulltext ).
    Ho cercato su google e credo che quello di tipo index faccia per me.

  4. #4
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Aggiungo...
    La chiave di una tabella permette di identificare un record.
    E' importante, e sarà importante anche per te, soprattutto perchè senza una chiave non puoi più ripescare il record.
    Ossia con una tabella fatta così:
    Codice:
    1|Commento dell'articolo 1|timestamp
    1|Altro commento dell'articolo 1|timestamp
    1|Questa è una bestemia.. |timestamp
    Puoi facilmente caricare tutti i commenti ma poi sarai in difficoltà nel cancellare il commento che contiene la bestemia dato che non sai come identificarlo.

    Gli indici invece servono per ottimizzare la tabella e vanno usati quando si sa come usarli, per farla breve diciamo che preordinano la tabella e quindi velocizzano alcune query (ma ne penalizzano altre in alcuni casi)
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •