Domanda

Con MyISAM avere colonne di lunghezza variabile (varchar, blob) sul tavolo query davvero rallentato in modo che ho incontrato consigli in rete per spostare le colonne varchar nella tabella a parte.

E 'ancora un problema con InnoDB? Non voglio dire i casi in cui l'introduzione di molte righe varchar nella tabella provoca divisione di pagina. Ho appena media dovrebbe prendere in considerazione, per esempio, spostare post_text (campo BLOB singola nella tabella) in un altro tavolo, parlando prestazioni-saggio su InnoDB?

È stato utile?

Soluzione

fuori Per quanto ne so BLOB (e testi) sono in realtà memorizzati del tavolo, VARCHAR vengono memorizzati nella tabella.

VARCHAR sono male per le prestazioni in lettura, perché ogni record può essere di lunghezza variabile e che rende più costoso per trovare campi di un record. BLOB sono lenti perché il valore deve essere recuperata separatamente e sarà molto probabile che richiedono un'altra lettura da disco o cache.

A mia conoscenza InnoDB non fa nulla di diverso in questo senso quindi vorrei assumere le caratteristiche di prestazioni tengono.

Non credo che si muove valori BLOB aiuta veramente - diverso da ridurre la dimensione complessiva della tabella che ha un influsso positivo sulle prestazioni a prescindere. VARCHAR sono una storia diversa. Sarà sicuramente beneficio qui. Se tutte le colonne sono di lunghezza definita (e immagino che significa che non è possibile utilizzare BLOB sia?) Il campo di ricerca sarà più veloce.

Se sei solo 'leggere' il VARHCAR e campi BLOB direi che questo vale la pena di un colpo. Ma se i vostri selezionare esigenze di query per confrontare un valore da un VARCHAR o un BLOB sei abbastanza acida.

Quindi sì, si può sicuramente ottenere prestazioni qui, ma assicuratevi di test che si sta effettivamente ottenendo prestazioni e che l'aumento vale la denormalizzazione aggressivo.

PS.

Un altro modo di 'ottimizzare' VARCHAR prestazioni di lettura è di sostituirli semplicemente campi char (di lunghezza fissa). Questo potrebbe beneficiare prestazioni di lettura, fino a quando l'aumento di spazio su disco è accettabile.

Altri suggerimenti

I dati InnoDB completamente diverso rispetto MyISAM.

In tutti gli indici MyISAM - primarie o in altro modo --- vengono memorizzate nel file MYI un contengono un puntatore ai dati memorizzati nel file MYD. le righe di lunghezza variabile non dovrebbero incidere direttamente interrogazione velocità direttamente, ma il file MYD tende a farsi più frammentato con le righe di lunghezza variabile, perché il buco lasciato alle spalle quando si elimina una riga non può necessariamente essere presentata con la riga di inserimento si successivo. Se si aggiorna un valore di lunghezza variabile per renderlo più a lungo potrebbe essere necessario spostare da qualche altra parte, il che significa che tendono a diventare out-of-ordine rispetto agli indici nel corso del tempo, rendendo le query gamma più lento. (Se si sta eseguendo su un disco rotante in cui tempi di ricerca sono importanti).

InnoDB memorizza i dati raggruppati in pagine di un B-albero sulla chiave primaria. Fino a quando i dati si inserisce in una pagina è memorizzato nella pagina se si sta utilizzando un BLOB o VARCHAR. Finché non si sta cercando di inserire i valori eccessivamente lunghi su base regolare dovrebbe non importa di lunghezza fissa o variabile lungo se le righe sono.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top