Durante la ricerca attraverso SO, ho trovato due risposte contraddittorie (e anche un commento che ha dichiarato che), ma nessuna risposta definitiva:memorizza TEXT/BLOB nella stessa tabella o no?
Il problema è: c'è qualche miglioramento delle prestazioni, se si memorizza un campo TEXT/BLOB fuori da un tavolo?
Noi assumiamo:
- di selezionare correttamente (solo la selezione TESTO/BLOB se necessario, No Selezionare *)
- tabelle sono indicizzati correttamente, in cui ha senso (quindi non è una questione di ' indicizzandolo ')
- Il design del database non ha molta importanza. Questa è una domanda per identificare il comportamento di MySQL in questo caso speciale, non per risolvere alcuni problemi di progettazione del database. Supponiamo questo database ha un solo tavolo (o due, se il testo/BLOB si separa) motore
- usato: InnoDB (altri sarebbero anche interessanti, se recuperare i risultati differenti)
Questo post stati, che mettendo TEXT/BLOB in una tabella separata, aiuta solo se stai già SELEZIONANDO in modo sbagliato (sempre SELEZIONA TESTO/BLOB anche quando non è necessario) - affermando sostanzialmente, che TEXT/BLOB nel la stessa tabella è fondamentalmente la soluzione migliore (meno complessità, nessun impatto sulle prestazioni, ecc.) dal momento che il TESTO/BLOB è memorizzato in modo sepratico in ogni caso
L'unica volta che spostare le colonne di TESTO in un'altra tabella offre vantaggi se si tende a selezionare solitamente tutte le colonne dalle tabelle. Questo è semplicemente l'introduzione di una seconda cattiva pratica per compensare il primo. Dovrebbe essere ovvio che i due torti non sono gli stessi di tre sinistri.
Questo post tuttavia, afferma che:
Quando una tabella ha TEXT o BLOB colonne, la tabella non può essere memorizzato nella memoria
Significa che è già abbastanza per avere un TESTO/BLOB all'interno di un tavolo, per avere un impatto sulle prestazioni?
La mia domanda è sostanzialmente: Qual è la risposta giusta?
È davvero importante se si memorizza TEXT/BLOB in una tabella separata, se si SELECT
correttamente?
Oppure ha anche un TESTO/UN BLOB all'interno di un tavolo, crea un potenziale impatto sulle prestazioni?
Qualsiasi motore di archiviazione specifico che si sta utilizzando? InnoDB/MyISAM/NDB, ecc. – gertvdijk
@gertvdijk L'ho aggiunto - Sono particolarmente interessato a una soluzione per InnoDB - ma fondamentalmente, se c'è una differenza, anche MyISAM e altri motori di archiviazione sarebbero interessanti – Katai