Daten aus spezifischen Partitionen abfragen
In diesem Schritt untersuchen wir, wie Daten effizient aus einer partitionierten Tabelle abgefragt werden können, indem wir spezifische Partitionen anvisieren. Dies ist einer der Hauptvorteile der Partitionierung, da sie es MySQL ermöglicht, nur die relevanten Partitionen zu scannen, wodurch die verarbeitete Datenmenge erheblich reduziert und die Abfrageleistung verbessert wird.
Erinnerung: Sie sollten sich immer noch in der MySQL-Shell befinden und die Datenbank sales_data verwenden. Falls nicht, verwenden Sie:
USE sales_data;
Um Daten aus einer spezifischen Partition abzufragen, können Sie eine WHERE-Klausel einfügen, die auf den Partitionierungsschlüssel filtert. Der Abfrageoptimierer von MySQL ist oft intelligent genug, um basierend auf der WHERE-Klausel zu identifizieren, welche Partitionen relevant sind.
Um beispielsweise alle Verkäufe aus dem Jahr 2021 abzurufen, können Sie die folgende Abfrage verwenden. Beachten Sie, dass wir eine direkte Bereichsbedingung für sale_date verwenden. Die Verwendung von Funktionen wie YEAR(sale_date) in der WHERE-Klausel kann verhindern, dass MySQL die Partition Pruning (Partitionen ausschließen) nutzt, was dazu führen würde, dass alle Partitionen gescannt werden.
SELECT * FROM sales WHERE sale_date >= '2021-01-01' AND sale_date < '2022-01-01';
Um zu sehen, welche Partitionen MySQL für diese Abfrage verwendet, können Sie die Anweisung EXPLAIN PARTITIONS verwenden:
EXPLAIN PARTITIONS SELECT * FROM sales WHERE sale_date >= '2021-01-01' AND sale_date < '2022-01-01';
In der Ausgabe von EXPLAIN PARTITIONS schauen Sie in die Spalte partitions. Sie sollte p2021 anzeigen, was darauf hindeutet, dass MySQL nur die Partition p2021 scannt, um diese Abfrage zu erfüllen.
+----+-------------+-------+------------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | sales | p2021 | ALL | PRIMARY | NULL | NULL | NULL | 2 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+-------------+
Sie können auch Daten abfragen, die sich über mehrere Partitionen erstrecken. Um beispielsweise Verkaufsdaten für die Jahre 2022 und 2023 zu erhalten:
SELECT * FROM sales WHERE sale_date >= '2022-01-01' AND sale_date < '2024-01-01';
Wenn Sie erneut EXPLAIN PARTITIONS verwenden, wird angezeigt, dass MySQL sowohl die Partitionen p2022 als auch p2023 verwendet:
EXPLAIN PARTITIONS SELECT * FROM sales WHERE sale_date >= '2022-01-01' AND sale_date < '2024-01-01';
Die Spalte partitions zeigt p2022,p2023 an.
+----+-------------+-------+---------------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+---------------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | sales | p2022,p2023 | ALL | PRIMARY | NULL | NULL | NULL | 4 | Using where |
+----+-------------+-------+---------------+------+---------------+------+---------+------+------+-------------+
Dies zeigt, wie die Partitionierung es MySQL ermöglicht, irrelevante Partitionen während der Abfrageausführung zu beschneiden (auszuschließen), was zu schnelleren Ergebnissen führt, insbesondere bei sehr großen Tabellen, bei denen das Scannen der gesamten Tabelle zeitaufwendig wäre.
Um die Anzahl der Zeilen in jeder Partition anzuzeigen, können Sie die Tabelle INFORMATION_SCHEMA.PARTITIONS abfragen:
SELECT
PARTITION_NAME,
TABLE_ROWS
FROM
INFORMATION_SCHEMA.PARTITIONS
WHERE
TABLE_SCHEMA = 'sales_data' AND TABLE_NAME = 'sales';
Diese Abfrage bietet eine klare Übersicht darüber, wie die Daten über Ihre Partitionen verteilt sind.
+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p2020 | 1 |
| p2021 | 2 |
| p2022 | 2 |
| p2023 | 2 |
| pFuture | 1 |
+----------------+------------+
Sie haben erfolgreich Daten aus spezifischen Partitionen abgefragt und beobachtet, wie MySQL die Partitionierung zur Abfrageoptimierung nutzt.