Dieser Abschnitt beschreibt, wie Sie sich Informationen über bestehende Partitionen beschaffen können. Da sich diese Funktionalität noch in der Planung befindet, sind die folgenden Ausführungen zurzeit nur eine Absichtserklärung über die Dinge, die wir in MySQL 5.1 implementieren wollen.
Wie bereits an anderer Stelle in diesem Kapitel gesagt, zeigt
die Ausgabe von SHOW CREATE TABLE
auch eine
PARTITION BY
-Klausel an, mit der eine
partitionierte Tabelle angelegt wurde. Zum Beispiel:
mysql> SHOW CREATE TABLE trb3\G
*************************** 1. row ***************************
Table: trb3
Create Table: CREATE TABLE `trb3` (
`id` int(11) default NULL,
`name` varchar(50) default NULL,
`purchased` date default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
PARTITION BY RANGE (YEAR(purchased)) (
PARTITION p0 VALUES LESS THAN (1990) ENGINE = MyISAM,
PARTITION p1 VALUES LESS THAN (1995) ENGINE = MyISAM,
PARTITION p2 VALUES LESS THAN (2000) ENGINE = MyISAM,
PARTITION p3 VALUES LESS THAN (2005) ENGINE = MyISAM
)
1 row in set (0.00 sec)
Hinweis: In frühen MySQL
5.1-Releases wurde die PARTITIONS
-Klausel
nicht für Tabellen angezeigt, die nach HASH
oder KEY
partitioniert waren. Dies wurde in
MySQL 5.1.6 behoben.
SHOW TABLE STATUS
funktioniert auch für
partitionierte Tabellen und hat dieselbe Ausgabe wie für
nichtpartitionierte Tabellen, nur dass die Spalte
Engine
immer den Wert
'PARTITION'
hat. (Mehr über diesen Befehl
erfahren Sie in Abschnitt 13.5.4.21, „SHOW TABLE STATUS
“.)
Informationen über Partitionen liefert Ihnen auch das
INFORMATION_SCHEMA
, zu dem auch eine
PARTITIONS
-Tabelle gehört. Siehe
Abschnitt 22.19, „Die Tabelle INFORMATION_SCHEMA PARTITIONS
“.
Seit MySQL 5.1.5 können Sie mit EXPLAIN
PARTITIONS
herausfinden, welche Partitionen einer
partitionierten Tabelle an einer
SELECT
-Anfrage beteiligt sind. Das
Schlüsselwort PARTITIONS
fügt der Ausgabe
von EXPLAIN
eine
partitions
-Spalte hinzu, in der die
Partitionen aufgeführt sind, in denen die Anfrage Datensätze
erkannt hat.
Angenommen, Sie haben eine Tabelle trb1
, die
folgendermaßen definiert und mit Daten gefüllt ist:
CREATE TABLE trb1 (id INT, name VARCHAR(50), purchased DATE) PARTITION BY RANGE(id) ( PARTITION p0 VALUES LESS THAN (3), PARTITION p1 VALUES LESS THAN (7), PARTITION p2 VALUES LESS THAN (9), PARTITION p3 VALUES LESS THAN (11) ); INSERT INTO trb1 VALUES (1, 'desk organiser', '2003-10-15'), (2, 'CD player', '1993-11-05'), (3, 'TV set', '1996-03-10'), (4, 'bookcase', '1982-01-10'), (5, 'exercise bike', '2004-05-09'), (6, 'sofa', '1987-06-05'), (7, 'popcorn maker', '2001-11-22'), (8, 'aquarium', '1992-08-04'), (9, 'study desk', '1984-09-16'), (10, 'lava lamp', '1998-12-25');
Mit folgendem Befehl können Sie sich darüber informieren,
welche Partitionen in einer Anfrage wie SELECT * FROM
trb1;
benutzt werden:
mysql> EXPLAIN PARTITIONS SELECT * FROM trb1\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: trb1
partitions: p0,p1,p2,p3
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 10
Extra: Using filesort
In diesem Fall wurden 4 vier Partitionen durchsucht. Wenn Sie der Anfrage jedoch eine einschränkende Bedingung hinzufügen, die den Partitionierungsschlüssel enthält, können Sie erkennen, dass nur diejenigen Partitionen gescannt werden, die passende Werte enthalten:
mysql> EXPLAIN PARTITIONS SELECT * FROM trb1 WHERE id < 5\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: trb1
partitions: p0,p1
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 10
Extra: Using where
EXPLAIN PARTITIONS
informiert über
verwendete und mögliche Schlüssel ebenso wie die
standardmäßige EXPLAIN SELECT
-Anweisung:
mysql>ALTER TABLE trb1 ADD PRIMARY KEY (id);
Query OK, 10 rows affected (0.03 sec) Records: 10 Duplicates: 0 Warnings: 0 mysql>EXPLAIN PARTITIONS SELECT * FROM trb1 WHERE id < 5\G
*************************** 1. row *************************** id: 1 select_type: SIMPLE table: trb1 partitions: p0,p1 type: range possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: NULL rows: 7 Extra: Using where
Beachten Sie jedoch folgende Restriktionen von EXPLAIN
PARTITIONS
:
Sie dürfen die Schlüsselwörter
PARTITIONS
und
EXTENDED
nicht zusammen in derselben
EXPLAIN ... SELECT
-Anweisung benutzen,
sonst verursachen Sie einen Syntaxfehler.
Der Befehl EXPLAIN PARTITIONS
liefert nur
dann brauchbare Ergebnisse, wenn er zur Untersuchung von
Anfragen auf RANGE
- oder
LIST
-partitionierten Tabellen verwendet
wird. (Bei KEY
- oder
HASH
-partitionierten Tabellen listet der
Befehl einfach alle Partitionen in der
partitions
-Spalte seiner Ausgabe auf.)
Wenn Sie mit EXPLAIN PARTITIONS
eine
Anfrage auf einer nichtpartitionierten Tabelle untersuchen,
wird zwar kein Fehler ausgelöst, aber der Wert der
partitions
-Spalte ist dann immer
NULL
.
EXPLAIN PARTITIONS
funktioniert zurzeit
nur mit Tabellen, die auf einer Integer-Spalte partitioniert
werden.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.