In generale, le prestazioni della tabella MySQL dipenderanno da alcuni fattori, come il motore di tabella (InnoDB, MyISAM, ...) e la quantità di aggiornamenti o di selezioni. Se selezioni principalmente sarai sorpreso di quanti milioni di file puoi gettare in una tabella con hardware modesto.
Per il tuo caso d'uso specifico, ti viene in mente un'idea: deduplica i tuoi termini di ricerca, poiché spesso verranno utilizzati gli stessi valori (supponiamo).
Una tabella crea una mappatura per un bigint con incremento automatico ai termini di ricerca univoci. Questa tabella ha il bigint come chiave primaria e anche un vincolo univoco sui termini di ricerca.
L'altra tabella tiene traccia di ciascun uso specifico dei termini di ricerca. Questa tabella avrebbe una chiave esterna bigint per la prima tabella. Tieni presente che questa tabella potrebbe essere costituita da righe di dimensioni fisse, il che può aiutare un po '.
Quindi, fondamentalmente:
-
INSERT IGNORE
nella prima tabella (termini di ricerca)
- seleziona dalla prima tabella per ottenere la chiave
- inserisci nella seconda tabella
Tre round trip per query.
Se sapessimo di più su cosa intendi per valori di ricerca, potremmo fornire un modello di tabella, che potrebbe finire con una terza tabella se hai bisogno di relazioni molti-a-molti. Ma volevo solo presentare l'idea di deduplicare i dati che potrebbero essere ridondanti.
Inoltre, non sottovalutare l'importanza della dimensione delle piccole righe in MySQL per le tabelle a cui si accede frequentemente. Non ha nulla di simile a TOAST di PostgreSQL, per quanto ne so. Quindi tirare fuori meno frequentemente aggiornato o accedere a valori con contenuti lunghi in una tabella separata one-to-one o one-to-many può essere una grande vittoria.