Ist die Zeitkosten konstant, wenn die Massendaten in eine indizierte Tabelle einfügen?
Frage
Ich habe eine Archiventabelle erstellt, in der nur Daten für die Auswahl gespeichert werden.
Täglich wird es ein Programm geben, um eine Reihe von Datensätzen in die Archivtabelle zu übertragen. Es gibt mehrere Spalten, die indiziert sind; Während andere nicht sind.
Ich besorgt um Zeitkosten pro Stapelinsertion:
- 1. Stapelinsertion: N1
- 2. Batchinsertion: N2
- 3. Batchinsertion: N3
Die Frage ist: Werden N1, N2 und N3 ungefähr gleich oder N3> N2> N1?
Das heißt, werden die Zeitkosten mit mehreren Indizes konstant oder inkrementell sein?
Alle Indizes sind nicht geklüpft.
Die Archiventabellenstruktur ist Folgendes:
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)
}
Lösung
Die Kosten werden inkrementell sein, O(log(n))
.
In der Praxis haben Sie einen Schritt in der Grafik, wenn die Indexgröße einen bestimmten Schwellenwert erreicht und die Indexseiten nicht mehr in den Cache einstellen können
Die Größe des Cache wird durch definiert durch key_buffer_size
in MyISAM
und innodb_buffer_pool_size
in InnoDB
.
Vor diesem Schwellenwert sind die Kosten proportional zur Zeitspanne, die nach dem Schwellenwert die Kosten proportional zur Zeitscheibe sein werden (alle multipliziert mit dem log(n)
Natürlich)