Numero massimo di record in una tabella del database MySQL


174

Qual è il limite superiore dei record per la tabella del database MySQL. Mi chiedo quale sia il campo dell'autoincremento. Cosa succederebbe se aggiungessi milioni di record? Come gestire questo tipo di situazioni? Grazie!


16
Per non parlare del 1.21 GIGAWATTS!
Ben,

2
Almeno se la memoria serve, il limite viene impostato dal motore di archiviazione, quindi (ad esempio) utilizzando MyISAM si ottiene un limite diverso dall'utilizzo di InnoDB.
Jerry Coffin,

77
@ Onion-Knight: non sono d'accordo. È normale inserire milioni di righe in una singola tabella e alcuni database hanno un limite, quindi vale la pena chiedere. Se uno chiede se MySQL supporta milioni di tabelle, questo è probabilmente un segno di un errore architettonico.
Bill Karwin,

Risposte:


61

I tipi di mysql int possono fare alcune righe: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

il intvalore più grande senza 4,294,967,295
segno bigintè il valore più grande senza segno è18,446,744,073,709,551,615


8
2147483647 max, quindi devi solo aumentare di livello l'autoincremento se lavori con più miliardi di voci? (che probabilmente farebbe sciogliere le tue dichiarazioni selezionate molto prima di allora)
Kzqai,

2
@Tchalvak è per int firmato, leggi la documentazione di mysql.
Leandro,

8
Il contesto della domanda riguarda se il campo di incremento automatico è in grado di gestire molte righe e non i limiti di altre risorse
KM.

21
Il poster non richiede dati numerici o altri tipi di dati. . Davvero non capisco come questo possa essere contrassegnato come una risposta corretta. Anche se devo ammettere che la domanda è ambigua, dovremmo distinguere tra il tipo di dati PK e il numero massimo di righe per una tabella.
Bery,

1
@Bery, l'OP ha distinto ciò che cercavano selezionando questo come risposta. Apparentemente erano interessati alla capacità del campo di incremento automatico, che copre la mia risposta, e non ai limiti di altre risorse.
KM.

238

Il valore più grande di un numero intero ha poco a che fare con il numero massimo di righe che è possibile memorizzare in una tabella.

È vero che se usi int o bigint come chiave primaria, puoi avere solo tante righe quanti sono i valori univoci nel tipo di dati della chiave primaria, ma non devi rendere la chiave primaria un numero intero , potresti renderlo un CHAR (100). È inoltre possibile dichiarare la chiave primaria su più di una colonna.

Esistono altri vincoli sulla dimensione della tabella oltre al numero di righe. Ad esempio, è possibile utilizzare un sistema operativo con una limitazione della dimensione del file. Oppure potresti avere un disco rigido da 300 GB in grado di memorizzare solo 300 milioni di righe se ogni riga ha una dimensione di 1 KB.

I limiti delle dimensioni del database sono davvero elevati:

http://dev.mysql.com/doc/refman/5.1/en/source-configuration-options.html

Il motore di archiviazione MyISAM supporta 2 32 righe per tabella, ma è possibile creare MySQL con l' --with-big-tablesopzione per far sì che supporti fino a 2 64 righe per tabella.

http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html

Il motore di archiviazione InnoDB non sembra avere un limite al numero di righe, ma ha un limite sulla dimensione della tabella di 64 terabyte. Quante righe si inseriscono in questo dipende dalla dimensione di ogni riga.


62
merda - vorrei averlo letto prima ... ho appena superato le mie 64 dimensioni di terrabyte su uno dei miei tavoli e ora il mio sistema è così lento!
JM4,

2 ^ 32 = 4.294.967.295 e 2 ^ 64 = 18.446.744.073.709.551.615 quindi ... Il valore intero più grande ha a che fare con il numero massimo di righe. Non necessariamente la chiave primaria.
teynon,

1
@Tom, InnoDB è il motore di archiviazione predefinito in MySQL 5.5 ed è la scelta migliore nel 99% dei casi.
Bill Karwin,

2
@ Ext3h, Sphinx Search è in genere una scelta migliore rispetto agli indici full-text in MyISAM o InnoDB.
Bill Karwin,

1
Per mysql 8 il limite è di 256 TB con una dimensione di pagina di 64 KB.
Uselesss

13

Suggerisco di non cancellare mai i dati. Non dire se le tabelle sono più lunghe di 1000 troncare la fine della tabella. È necessario che nel piano sia presente una logica di business reale, ad esempio da quanto tempo questo utente è inattivo. Ad esempio, se è più lungo di 1 anno, inseriscili in una tabella diversa. Ciò avverrebbe settimanalmente o mensilmente in uno script di manutenzione nel bel mezzo di un tempo lento.

Quando ti imbatti in molte righe nella tua tabella, dovresti iniziare a condividere le tabelle o il partizionamento e inserire i vecchi dati nelle vecchie tabelle per anno come users_2011_jan, users_2011_feb o utilizzare i numeri per il mese. Quindi cambia la tua programmazione per lavorare con questo modello. Forse creare una nuova tabella con meno informazioni per riepilogare i dati in meno colonne e quindi fare riferimento alle tabelle partizionate più grandi quando sono necessarie più informazioni, ad esempio quando l'utente sta visualizzando il proprio profilo. Tutto questo dovrebbe essere considerato con molta attenzione, quindi in futuro non è troppo costoso ripensare. Puoi anche mettere solo gli utenti che arrivano al tuo sito per tutto il tempo in una tabella e gli utenti che non arrivano mai in una serie di tabelle archiviate.


1
A questo proposito, è molto utile guardare al partizionamento MySQL: dev.mysql.com/doc/refman/5.6/en/partitioning.html
Wim Deblauwe

10

In InnoDB, con un limite sulla dimensione della tabella di 64 terabyte e un limite della dimensione della riga MySQL di 65.535, possono esserci 1.073.741.824 righe. Sarebbe il numero minimo di record che utilizzano il limite massimo di dimensione della riga. Tuttavia, è possibile aggiungere più record se la dimensione della riga è inferiore.


per memorizzare così tante (1.073.741.824) righe con un limite di riga di 65535, quante dimensioni del disco rigido sono richieste? per favore, suggerisci
davidb,

1
La dimensione del disco rigido richiesta non può essere determinata in base al numero di righe e alla dimensione della riga da sola. La dimensione della tabella stessa sarà di 64 terabyte. Tuttavia, i dati delle colonne TEXT e BLOB sono memorizzati separatamente dalla riga e avranno bisogno di spazio aggiuntivo. Inoltre, dipenderà dal numero e dal tipo delle colonne TEXT e BLOB poiché le dimensioni variano a seconda del tipo. Esistono quattro tipi di colonne TEXT, vale a dire TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT. Esistono anche quattro tipi di colonne BLOB, ovvero TINYBLOB, MEDIUMBLOB, BLOB e LONGBLOB.
Xylo,

2

Secondo la sezione Scalabilità e limiti in http://dev.mysql.com/doc/refman/5.6/en/features.html , supporto MySQL per database di grandi dimensioni. Usano MySQL Server con database che contengono 50 milioni di record. Alcuni utenti utilizzano MySQL Server con 200.000 tabelle e circa 5.000.000.000 di righe.


potrebbe esserti utile sapere anche che tipo di hardware "Loro" stavano usando
mio account_ram

Anzi, hai ragione. Ma sfortunatamente "loro" non hanno fatto nulla sull'hardware
Data

@myaccount_ram mi dispiace negarlo, ma se è utile ho visto in azione i limiti meno teorici e più pratici della produzione di MySQL. Ho visto un database di ~ 18 miliardi di righe su istanze AWS 2x db.r4.16xlarge (1 lettore, 1 scrittore). Ognuna delle macchine aveva 64 core della CPU, 488 GB di RAM, collegamento di rete a 25 Gbps, 64 TB di disco. Questa scala di db stava spingendo i limiti di dimensione del disco e della CPU e AWS non fornisce istanze ottimizzate di DB più grandi. Fu sostituito con uno schema db più semplice che non richiedeva tante righe.
Skylar Brown,

1

Limiti dimensioni riga

The maximum row size for a given table is determined by several factors:
  • La rappresentazione interna di una tabella MySQL ha un limite di dimensione massima delle righe di 65.535 byte, anche se il motore di archiviazione è in grado di supportare righe più grandi. Le colonne BLOB e TEXT contribuiscono solo da 9 a 12 byte rispetto al limite della dimensione della riga poiché il loro contenuto viene archiviato separatamente dal resto della riga.

  • La dimensione massima della riga per una tabella InnoDB, che si applica ai dati memorizzati localmente all'interno di una pagina del database, è leggermente inferiore a mezza pagina. Ad esempio, la dimensione massima della riga è leggermente inferiore a 8 KB per la dimensione della pagina InnoDB di 16 KB predefinita, definita dall'opzione di configurazione innodb_page_size. " Limiti su tabelle InnoDB ".

  • Se una riga contenente colonne a lunghezza variabile supera la dimensione massima della riga InnoDB, InnoDB seleziona le colonne a lunghezza variabile per l'archiviazione fuori pagina esterna fino a quando la riga non rientra nel limite della dimensione della riga InnoDB. La quantità di dati archiviati localmente per colonne di lunghezza variabile archiviate fuori pagina varia in base al formato della riga. Per ulteriori informazioni, vedere " Archiviazione di righe InnoDB e formati di riga ".
  • Diversi formati di archiviazione utilizzano quantità diverse di intestazione di pagina e dati del trailer, il che influisce sulla quantità di spazio di archiviazione disponibile per le righe.

1

Link http://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html

Limiti dimensioni riga

La dimensione massima della riga per una determinata tabella è determinata da diversi fattori:

La rappresentazione interna di una tabella MySQL ha un limite di dimensione massima delle righe di 65.535 byte, anche se il motore di archiviazione è in grado di supportare righe più grandi. Le colonne BLOB e TEXT contribuiscono solo da 9 a 12 byte rispetto al limite della dimensione della riga poiché il loro contenuto viene archiviato separatamente dal resto della riga.

La dimensione massima della riga per una tabella InnoDB, che si applica ai dati memorizzati localmente all'interno di una pagina del database, è leggermente inferiore a mezza pagina per le impostazioni innodb_page_size 4KB, 8KB, 16KB e 32KB. Ad esempio, la dimensione massima della riga è leggermente inferiore a 8 KB per la dimensione predefinita della pagina InnoDB da 16 KB. Per le pagine da 64 KB, la dimensione massima della riga è leggermente inferiore a 16 KB. Vedere la Sezione 15.8.8, "Limiti delle tabelle InnoDB".

Se una riga contenente colonne a lunghezza variabile supera la dimensione massima della riga InnoDB, InnoDB seleziona le colonne a lunghezza variabile per l'archiviazione fuori pagina esterna fino a quando la riga non rientra nel limite della dimensione della riga InnoDB. La quantità di dati archiviati localmente per colonne di lunghezza variabile archiviate fuori pagina varia in base al formato della riga. Per ulteriori informazioni, consultare la Sezione 15.11, "Archiviazione di righe InnoDB e formati di riga".

Diversi formati di archiviazione utilizzano quantità diverse di intestazione di pagina e dati del trailer, il che influisce sulla quantità di spazio di archiviazione disponibile per le righe.

Per informazioni sui formati di riga InnoDB, vedere la Sezione 15.11, "Memoria delle righe e formati di riga InnoDB" e la Sezione 15.8.3, "Struttura delle righe fisiche delle tabelle InnoDB".

Per informazioni sui formati di archiviazione MyISAM, consultare la Sezione 16.2.3, "Formati di archiviazione delle tabelle MyISAM".

http://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html


-3

Non c'è limite. Dipende solo dalla memoria libera e dalle dimensioni massime del file di sistema. Ma ciò non significa che non dovresti prendere misure precauzionali per affrontare l'utilizzo della memoria nel tuo database. Crea sempre uno script in grado di eliminare le righe inutili o che manterranno il numero totale di righe all'interno di una determinata figura, diciamo mille.


8
L'eliminazione di righe che ritieni inutili è pericolosa e causa molti più problemi di quanti ne risolva. Un precedente sviluppatore di uno dei miei progetti aveva implementato una sceneggiatura che cancellava i carrelli della spesa più di tre giorni, pensando che stesse facendo la cosa giusta. Indovina un po ', causa problemi settimanalmente. Elimina i dati solo se necessario.
Ben Hitchcock,

un caso peggiore è quando qualcuno inizia a memorizzare percorsi di file in un database ... fieno dove sono finiti tutti i miei file di progetto .... ho un piccolo progetto che inizia a 3,5 M file indovinate un po '... non sono tutti usato frequentemente.
Kendrick,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.