Il costo del tempo è costante quando si inserisce i dati in blocco in una tabella indicizzata?
Domanda
Ho creato una tabella di archivio che memorizzerà i dati solo per la selezione.
Ogni giorno ci sarà un programma per trasferire un lotto di record nella tabella dell'archivio. Esistono diverse colonne indicizzate; mentre altri non lo sono.
Sono interessato al costo del tempo per inserimento batch:
- 1 ° inserimento batch: N1
- 2 ° inserimento in batch: N2
- Inserzione del terzo batch: N3
La domanda è: N1, N2 e N3 saranno approssimativamente gli stessi o N3> N2> N1?
Cioè, il costo del tempo sarà costante o incrementale, con l'esistenza di diversi indici?
Tutti gli indici non sono cluster.
La struttura della tabella dell'archivio è questa:
create table document (
doc_id int unsigned primary key,
owner_id int, -- indexed
title smalltext,
country char(2),
year year(4),
time datetime,
key ix_owner(owner_id)
}
Soluzione
Il costo sarà incrementale, O(log(n))
.
In pratica, avrai un passo sul grafico quando la dimensione dell'indice raggiunge una determinata soglia e le pagine dell'indice smetteranno di adattarsi alla cache
La dimensione della cache è definita da key_buffer_size
in MyISAM
e innodb_buffer_pool_size
in InnoDB
.
Prima di questa soglia, il costo sarà proporzionale al tempo di ricerca della memoria, dopo la soglia, il costo sarà proporzionale al tempo di ricerca del disco (tutti moltiplicati per il log(n)
Certo)