Un miliardo di righe con un campo di 100 k è, a dir poco, grande. Questo arriva a 100 Tbyte di dati (usando la definizione americana di "terabyte"). Secondo il documentation: motore di memorizzazione
L'InnoDB mantiene le tabelle InnoDB all'interno di uno spazio tabella che possono essere creati da diversi file. Ciò consente a una tabella di superare la dimensione massima del singolo file. Lo spazio tabella può includere le partizioni del disco crudo , che consente tabelle estremamente grandi. La dimensione massima del tablespace è 64TB.
In altre parole, potresti avere problemi più grandi delle prestazioni. Probabilmente diffonderai la tabella su più partizioni.
Se solo occasionalmente si recupera il testo e non lo si utilizza mai per le ricerche, suggerirei di memorizzarlo in una tabella separata. In questo modo, puoi personalizzare quella tabella per accedere a questi record. Avrai una chiave primaria usata come riferimento e tutti i riferimenti saranno attraverso quell'id.
Se si utilizza il testo per le ricerche, in particolare le ricerche combinate con i dati "fissi", la mia preferenza architettonica sarebbe quella di includerlo nella tabella di base per facilitare la ricerca tra i campi.
Tuttavia, anche con questa preferenza, è probabilmente più sicuro di metterlo in una tabella diversa. Ad esempio, MySQL crea istanze secondarie. È molto tipico usare *
per una sottoquery.Si consideri un caso semplice: una query per ottenere i 1000 più recenti record in ordine di userid:
select t.*
from (select t.*
from t
order by createddate
limit 1000
) t
order by userid
L'utilizzo di t.*
significa che la colonna di testo sarebbe anche essere recuperate. Quindi una query che potrebbe richiedere una frazione di secondo (con un indice) dovrebbe leggere e scrivere 1000 * 100k = 100 Mbyte di dati (almeno). Probabilmente ci vorrà un po 'di più.
In conclusione, vorrei sostenere l'inserimento della colonna di testo in una tabella in cui viene spesso eseguita la ricerca con altre colonne, ad esempio in un database di abstract di articoli scientifici. Per dati veramente grandi, lo metterei in un campo separato, quindi potrei gestire meglio lo storage in casi estremi.
Vuoi partecipare ai campi di testo? –
Beh, se è solo un puntatore, penso che sia meglio essere nella stessa tabella. Finché non lo selezioni, non penso che influenzerà le tue domande. e se si separa è solo più "ricerche" per fare il db prima di darti il risultato. –
Non mi unisco ai campi di testo, voglio dire unirmi a una tabella che contiene solo il campo di testo. –