Vergleichen wir sie
TEILUNGSGRÖSSE
Wenn Sie Folgendes haben:
- 100 Millionen Zeilen in einer Tabelle
- BTREE-Indizierung
- Jede Seite im BTREE enthält 1024 Schlüssel
Wie würden die Metriken aussehen?
Da LOG (100000000) / LOG (2) = 26.575424759099, hätte ein BTREE-Index mit 1024 Schlüsseln pro Seite treenode eine Baumhöhe von nur 3 (CEILING (LOG (100000000) / LOG (1024))). Bei nur drei Seitenknoten würde eine binäre Suche nach dem benötigten Schlüssel in jedem Treenode, auf den zugegriffen wird, zu einem Beschneiden und Isolieren von etwa 30 Schlüsseln führen.
ANZAHL DER TEILUNGEN
Wenn Sie Folgendes haben:
- 100 Millionen Zeilen in einer Tabelle
- BTREE-Indizierung
- Jede Seite im BTREE enthält 1024 Schlüssel
- Sie erstellen 1024 Parititionen
Die Zahlen wären etwas anders.
Jede Partition sollte ungefähr 97656 Zeilen haben. Was würden die Metriken jetzt werden?
Da LOG (97656) / LOG (2) = 16.575421065795, hätte ein BTREE-Index mit 1024 Schlüsseln pro Seite treenode eine Baumhöhe von nur 2 (CEILING (LOG (97656) / LOG (1024))). Mit nur zwei Seitenknoten würde eine binäre Suche nach dem benötigten Schlüssel in jedem aufgerufenen Treenode zu einem Beschneiden und Isolieren von ungefähr 20 Schlüsseln führen.
FAZIT
Durch das Verteilen der Schlüssel wird nur eine Baumebene entfernt, es werden jedoch im Wesentlichen 1024 Indizes erstellt. Die Abfragen kennen den Unterschied nicht. Die Suchzeit wäre wahrscheinlich bestenfalls nominal zugunsten von Partitionen. Stellen Sie jedoch sicher, dass alle Daten aktiv sind. Andernfalls treffen Sie möglicherweise nur wenige Partitionen, während andere Partitionen mit Daten, auf die nur selten zugegriffen wird, nur Speicherplatz beanspruchen und nie häufig genug aufgerufen werden, um die Partitionierung zu rechtfertigen . Möglicherweise müssen Sie sich um andere Leistungsmetriken kümmern, die offensichtlicher sind (z. B. interne Defragmentierung in XFS , ext3 oder ext4 usw.). Sie müssen sich auch Gedanken darüber machen, welche Speicher-Engine Sie verwenden, weil:
- Die InnoDB-Indizierung wäre im Vergleich zu MyISAM etwas unübersichtlicher, da ein Clustered-Index verwaltet werden muss
- InnoDB schreibt Daten sowohl in ibdata1 als auch in der aktuellen Protokolldatei (ib_logfile0 oder ib_logfile1) doppelt.