Datenbank-Inspektionen in PhpStorm
PhpStorm enthält einen vollständigen Datenbank-Client – mit SQL-Autovervollständigung, EXPLAIN PLAN Visualisierung, Schemadiff und Query-Analyse. Wer diese Werkzeuge kennt, braucht TablePlus, DBeaver oder Sequel Pro nicht mehr zu öffnen.
Inhaltsverzeichnis
- 1. PhpStorm als vollständiger Datenbank-Client
- 2. Datenbankverbindung für Docker-Magento einrichten
- 3. Die SQL-Konsole: Autovervollständigung und Kontext
- 4. EXPLAIN PLAN: Queries analysieren und optimieren
- 5. Schema-Navigation und Tabellenstruktur erkunden
- 6. Datenbank-Diff und Schema-Vergleich
- 7. Magento EAV-Struktur mit PhpStorm navigieren
- 8. Daten-Export und Query-Ergebnisse weiterverwenden
- 9. PhpStorm DB-Tools vs. externe Clients im Vergleich
- 10. Zusammenfassung
- 11. FAQ
1. PhpStorm als vollständiger Datenbank-Client
Das Database-Tool-Window in PhpStorm ist kein einfacher SQL-Editor, sondern ein vollständiger Datenbank-Client mit Schema-Navigation, Query-Analyse, Datenbankdiff, Daten-Export und integrierter EXPLAIN PLAN Visualisierung. Für PHP-Entwickler, die ohnehin in PhpStorm arbeiten, bedeutet das: keine Kontextumschaltung zwischen IDE und externem Datenbank-Tool. Schema-Informationen, die im Database-Window sichtbar sind, stehen auch in der SQL-Autovervollständigung und in PHP-Code-Completion bereit.
Gerade für Magento-Projekte ist dieser Kontext wertvoll. PhpStorm kann die Magento-Datenbank mit ihren über 400 Tabellen indizieren und Entwicklern beim Schreiben von SQL-Queries in PHP-Code vollständige Autovervollständigung für Tabellennamen, Spaltennamen und sogar Enum-Werte anbieten. Wer in einem ViewModel ein Raw-Query formuliert, bekommt direkt Hinweise auf korrekte Tabellen- und Spaltennamen – ohne die Dokumentation zu konsultieren oder die Datenbank manuell zu durchsuchen.
Die Integration geht noch tiefer: PhpStorm erkennt SQL-Strings in PHP-Code und bietet in diesen Strings dieselbe SQL-Autovervollständigung wie in der SQL-Konsole. Das funktioniert für einfache Strings, Heredocs und sogar für PDO-Prepared-Statements. Wenn ein Tabellenname in einem SQL-String tippfehlt, zeigt PhpStorm eine Warnung – noch bevor die Anfrage ausgeführt wird.
2. Datenbankverbindung für Docker-Magento einrichten
Für eine Docker-Magento-Umgebung nach dem Mark-Shust-Pattern läuft MySQL im db-Container auf Port 3306. Der Port ist nach außen gemappt – üblicherweise auf localhost:3306 des Hosts. Im Database-Tool-Window (View → Tool Windows → Database) legt man eine neue Datenquelle an: + → Data Source → MySQL. Als Host 127.0.0.1, Port 3306, Datenbankname magento, Benutzer und Passwort aus der .env-Datei des Docker-Projekts.
Ein wichtiger Schritt nach dem Einrichten: Schemas auswählen. PhpStorm indiziert standardmäßig alle Datenbanken auf dem Server. Für Magento-Projekte sollte nur die Magento-Datenbank ausgewählt werden, da das Indizieren aller 400+ Tabellen sonst beim ersten Start mehrere Minuten dauert. Unter Data Source Settings → Schemas lässt sich das einschränken. Nach dem ersten Indizieren werden Änderungen inkrementell aktualisiert.
PhpStorm unterstützt SSH-Tunnel direkt in der Verbindungskonfiguration. Für Produktionsdatenbanken, die nur über einen Jump-Host erreichbar sind, kann der SSH-Tunnel in den Connection-Settings konfiguriert werden – ohne separaten SSH-Tunnel im Terminal. Das ist besonders nützlich, wenn man Schema-Vergleiche zwischen Staging und Produktion durchführen möchte, ohne die Daten zu exportieren und lokal zu importieren.
3. Die SQL-Konsole: Autovervollständigung und Kontext
Die SQL-Konsole öffnet man mit einem Rechtsklick auf die Datenquelle und Open Query Console oder mit Ctrl+Shift+F10. Sie bietet kontextbewusste Autovervollständigung: Nach SELECT * FROM schlägt sie alle Tabellen der verbundenen Datenbank vor. Nach einem Tabellennamen und einem Punkt vervollständigt sie Spaltennamen – mit Typinformation und Nullable-Status. Diese Autovervollständigung ist schneller und präziser als die meisten externen Datenbank-Clients.
Besonders praktisch ist die Parameterisierung von Queries direkt in der SQL-Konsole. Mit WHERE entity_id = :entity_id fügt PhpStorm einen Parameter-Dialog ein, sobald die Query ausgeführt wird. Das ermöglicht das schnelle Testen derselben Query mit verschiedenen Werten, ohne die Query jedes Mal anzupassen. Der Dialog merkt sich die zuletzt verwendeten Werte und bietet sie beim nächsten Ausführen als Standard an.
Die SQL-Konsole unterstützt mehrere Statements in einem Fenster. Mit Ctrl+Enter wird das Statement ausgeführt, auf dem der Cursor steht. Mit Ctrl+Shift+Enter werden alle Statements im Fenster der Reihe nach ausgeführt. Ergebnisse erscheinen in einem tabellarischen Grid unterhalb des Editors, das sortierbar, filterbar und direkt editierbar ist. Änderungen im Grid werden als UPDATE-Statements in die Datenbank geschrieben – nach einer expliziten Bestätigung.
4. EXPLAIN PLAN: Queries analysieren und optimieren
EXPLAIN PLAN ist das wichtigste Werkzeug zur Query-Optimierung und steht in der SQL-Konsole direkt über den Button Explain Plan oder Ctrl+Shift+E zur Verfügung. PhpStorm führt die Query mit EXPLAIN FORMAT=JSON aus und visualisiert das Ergebnis in einem interaktiven Baum. Jeder Knoten zeigt Tabellenzugriff, verwendeten Index, Join-Typ, geschätzte Zeilen und tatsächliche Ausführungskosten an.
Für Magento sind langsame Queries oft auf fehlende Indizes bei EAV-Joins oder auf Table-Scans bei Filteroperationen zurückzuführen. Ein EXPLAIN-Plan zeigt sofort, ob ein Full Table Scan stattfindet – erkennbar am Join-Typ ALL und der hohen Zeilen-Schätzung. PhpStorm hebt kritische Knoten visuell hervor und zeigt, an welcher Stelle ein Index fehlt oder der Query-Optimizer eine suboptimale Entscheidung trifft.
<?php
// Beispiel: Magento-Repository mit optimiertem SQL für EXPLAIN-Analyse
// app/code/Mironsoft/Catalog/Model/ResourceModel/Product/Collection.php
declare(strict_types=1);
namespace Mironsoft\Catalog\Model\ResourceModel\Product;
use Magento\Catalog\Model\ResourceModel\Product\Collection as BaseCollection;
/**
* Extended product collection with optimized SQL for PhpStorm EXPLAIN analysis.
* Run raw query in PhpStorm SQL console to analyze execution plan.
*/
class Collection extends BaseCollection
{
/**
* Join custom pricing table with index-aware filtering.
* SQL for EXPLAIN PLAN analysis in PhpStorm:
*
* EXPLAIN SELECT e.entity_id, e.sku, p.special_price
* FROM catalog_product_entity e
* INNER JOIN mironsoft_product_pricing p ON e.entity_id = p.product_id
* WHERE p.store_id = 1
* AND p.special_price > 0
* AND p.valid_until >= CURDATE()
* ORDER BY p.special_price ASC
* LIMIT 50;
*/
public function addSpecialPriceFilter(int $storeId): static
{
$this->getSelect()
->joinInner(
['price_table' => $this->getTable('mironsoft_product_pricing')],
'e.entity_id = price_table.product_id AND price_table.store_id = ' . $storeId,
['special_price', 'valid_until']
)
->where('price_table.special_price > 0')
->where('price_table.valid_until >= CURDATE()');
return $this;
}
}
Das EXPLAIN PLAN Ergebnis in PhpStorm zeigt neben dem visuellen Baum auch die rohen EXPLAIN-Daten in einem separaten Tab. Der Vergleich von EXPLAIN-Ergebnissen vor und nach dem Hinzufügen eines Index ist mit der History-Funktion der SQL-Konsole einfach möglich: PhpStorm speichert alle ausgeführten Statements und ihre Ergebnisse, sodass man ältere EXPLAIN-Ausgaben mit aktuellen vergleichen kann, ohne sie manuell zu dokumentieren.
5. Schema-Navigation und Tabellenstruktur erkunden
Das Database-Tool-Window zeigt alle Tabellen der verbundenen Datenbank in einer hierarchischen Struktur. Ein Doppelklick auf eine Tabelle öffnet das Daten-Grid. Ein Klick auf das Pfeil-Icon neben einer Tabelle expandiert die Spalten, Indizes und Fremdschlüssel. Für Magento-Projekte mit ihrer komplexen EAV-Struktur ist diese Navigation deutlich übersichtlicher als die Information-Schema-Queries, die man sonst im Terminal schreibt.
PhpStorm zeigt Fremdschlüsselbeziehungen als navigierbare Links. Ein Klick auf einen Fremdschlüssel springt zur referenzierten Tabelle und hebt die referenzierte Spalte hervor. Das erlaubt es, die Beziehungsstruktur von Magento-Tabellen intuitiv zu erkunden – besonders nützlich, wenn man verstehen möchte, wie catalog_product_entity, die EAV-Value-Tabellen und catalog_product_entity_varchar zusammenhängen.
Die Suchfunktion im Database-Tool-Window (Ctrl+F) erlaubt das schnelle Auffinden von Tabellen und Spalten. Mit dem Filter lassen sich Tabellen nach Muster suchen – catalog_product* zeigt alle Catalog-Product-Tabellen. Das ist in Magento mit seinen über 400 Tabellen erheblich schneller als manuelle Suche oder Terminal-Queries gegen information_schema.tables.
6. Datenbank-Diff und Schema-Vergleich
Der Schema-Diff ist eine der leistungsstärksten Funktionen des PhpStorm Datenbank-Tools. Er vergleicht zwei Datenbankinstanzen – etwa lokale Entwicklungsumgebung und Staging – und zeigt die Unterschiede in Tabellenstruktur, Indizes und Spalten. Das Ergebnis ist ein visueller Diff und optional ein generiertes SQL-Migrationsskript, das die Unterschiede ausgleicht.
Für Magento-Projekte ist Schema-Diff besonders nützlich nach dem Installieren neuer Extensions. Wenn eine Extension Tabellen ohne deklaratives Schema hinzufügt oder bestehende Tabellen verändert, zeigt der Diff genau, was geändert wurde. Das vereinfacht Code-Reviews und hilft dabei, unerwünschte Schemaänderungen zu erkennen, bevor sie in Produktion gehen. Der generierte SQL-Diff kann direkt in die SQL-Konsole kopiert und gegen die Zieldatenbank ausgeführt werden.
Ein weiterer Anwendungsfall: Vergleich zwischen db_schema.xml-Deklaration und tatsächlichem Datenbankzustand. Wenn eine Schemaänderung nicht korrekt angewendet wurde oder wenn setup:upgrade nicht vollständig durchgelaufen ist, zeigt der Diff die Abweichung sofort – ohne manuelle Queries zu schreiben.
7. Magento EAV-Struktur mit PhpStorm navigieren
Magento's Entity-Attribute-Value (EAV)-System ist für viele Entwickler eine Black Box. PhpStorm macht die Struktur mit seiner Datenbanknavigation transparent. Die zentrale Tabelle eav_attribute verknüpft über entity_type_id mit eav_entity_type. Die eigentlichen Werte liegen in typisierten Tabellen wie catalog_product_entity_varchar, catalog_product_entity_int und catalog_product_entity_decimal. Über das Database-Tool-Window lassen sich diese Beziehungen direkt erkunden.
Eine hilfreiche SQL-Query für die PhpStorm SQL-Konsole: Alle Attribute eines Produkttyps mit ihren Werten abfragen. Durch das Ausführen in der SQL-Konsole und das Betrachten des Ergebnisses im Grid lässt sich schnell verstehen, welche Attribute an welchen Tabellen hängen und welche Werte ein konkretes Produkt hat. Das ist deutlich effizienter als das manuelle Durchsuchen von XML-Konfigurationsdateien oder Datenbankdokumentation.
-- SQL-Konsole: Magento EAV-Attributwerte für ein Produkt abfragen
-- In PhpStorm SQL-Konsole einfügen und mit Ctrl+Enter ausführen
-- EXPLAIN PLAN (Ctrl+Shift+E) zeigt Join-Strategie und Index-Nutzung
SELECT
ea.attribute_code,
ea.frontend_input,
COALESCE(
varchar_val.value,
int_val.value,
decimal_val.value,
text_val.value,
datetime_val.value
) AS attribute_value,
ea.is_required,
ea.is_visible
FROM eav_attribute ea
JOIN eav_entity_type eet
ON ea.entity_type_id = eet.entity_type_id
AND eet.entity_type_code = 'catalog_product'
LEFT JOIN catalog_product_entity_varchar varchar_val
ON varchar_val.attribute_id = ea.attribute_id
AND varchar_val.entity_id = :product_id
AND varchar_val.store_id = 0
LEFT JOIN catalog_product_entity_int int_val
ON int_val.attribute_id = ea.attribute_id
AND int_val.entity_id = :product_id
AND int_val.store_id = 0
LEFT JOIN catalog_product_entity_decimal decimal_val
ON decimal_val.attribute_id = ea.attribute_id
AND decimal_val.entity_id = :product_id
AND decimal_val.store_id = 0
LEFT JOIN catalog_product_entity_text text_val
ON text_val.attribute_id = ea.attribute_id
AND text_val.entity_id = :product_id
AND text_val.store_id = 0
LEFT JOIN catalog_product_entity_datetime datetime_val
ON datetime_val.attribute_id = ea.attribute_id
AND datetime_val.entity_id = :product_id
AND datetime_val.store_id = 0
WHERE ea.is_visible = 1
ORDER BY ea.attribute_code;
8. Daten-Export und Query-Ergebnisse weiterverwenden
Query-Ergebnisse im Grid lassen sich über Rechtsklick → Export Data in verschiedene Formate exportieren: CSV, JSON, SQL-Insert-Statements, Excel und mehr. Für Magento-Entwicklung ist der CSV-Export nützlich, um Produktdaten für Tests zu extrahieren oder Konfigurationsdaten zwischen Umgebungen zu kopieren. Der SQL-Insert-Export generiert INSERT-Statements, die direkt in eine andere Datenbankinstanz importiert werden können.
Ein besonderes Feature ist der Live-Edit-Modus im Daten-Grid. Wer direkt im Grid einen Wert ändert, generiert PhpStorm automatisch das entsprechende UPDATE-Statement und zeigt es vor der Ausführung an. Das ist schneller als manuelles UPDATE-Schreiben und sicherer, weil der WHERE-Clause automatisch korrekt gesetzt wird. Für das Debugging von Magento-Konfigurationswerten in der core_config_data-Tabelle ist das ideal.
Die Query-History der SQL-Konsole (Ctrl+Alt+E) speichert alle ausgeführten Statements mit Zeitstempel und Ergebnis-Vorschau. Komplexe Queries lassen sich als Favoriten speichern und mit einem Namen versehen. Für wiederkehrende Analyse-Queries – etwa EXPLAIN-Plans für bestimmte Report-Queries – ist das eine erhebliche Zeitersparnis gegenüber dem erneuten Schreiben oder Suchen in Browser-Bookmarks.
9. PhpStorm DB-Tools vs. externe Clients im Vergleich
Der wichtigste Vorteil der PhpStorm-Datenbankwerkzeuge gegenüber externen Clients liegt in der IDE-Integration. SQL-Autovervollständigung im PHP-Code, sofortiger Wechsel zwischen Code und Daten-Grid, EXPLAIN-Analyse ohne Kontextumschaltung – das summiert sich zu einem deutlich flüssigeren Entwicklungsrhythmus.
| Feature | PhpStorm | TablePlus / DBeaver | MySQL Workbench |
|---|---|---|---|
| SQL im PHP-Code | Autovervollständigung | Nicht verfügbar | Nicht verfügbar |
| EXPLAIN PLAN | Visuell + JSON | Tabellarisch | Visuell |
| Schema-Diff | Integriert | Kostenpflichtig | Verfügbar |
| SSH-Tunnel | Integriert | Integriert | Integriert |
| Preis | In PhpStorm enthalten | Separate Lizenz | Kostenlos |
Externe Clients wie TablePlus haben Vorteile bei der reinen Datenbankarbeit: schnellere Navigation bei sehr vielen Verbindungen, bessere Performance bei großen Ergebnismengen und eine fokussiertere Benutzeroberfläche. Für PHP-Entwickler, die den Großteil des Tages in PhpStorm verbringen, überwiegen jedoch die Vorteile der IDE-Integration. Ein externer Client bleibt sinnvoll für intensive reine Datenbankarbeit – etwa Daten-Migration oder komplexe Bulk-Operationen.
Mironsoft
Magento 2 Performance · Datenbankoptimierung · PHP 8.4
Langsame Magento-Queries finden und beheben?
Wir analysieren Magento-Datenbankperformance mit EXPLAIN PLAN, identifizieren fehlende Indizes und optimieren kritische Queries – mit PhpStorm-Datenbankwerkzeugen und profunder EAV-Kenntnisse.
Query-Analyse
EXPLAIN PLAN für kritische Magento-Queries, Index-Empfehlungen und Query-Refactoring
Schema-Audit
Datenbankschema-Vergleich zwischen Umgebungen, fehlende Migrationen identifizieren
IDE-Setup
PhpStorm Datenbankverbindung für Docker-Magento einrichten, EXPLAIN-Workflow aufsetzen
10. Zusammenfassung
PhpStorms integrierte Datenbankwerkzeuge machen den Kontextwechsel zwischen IDE und externem Datenbank-Client für die meisten Alltagsaufgaben überflüssig. Die SQL-Konsole mit vollständiger Autovervollständigung, parameterisierten Queries und Query-History, EXPLAIN PLAN mit visueller Darstellung, Schema-Navigation für die komplexe Magento-Tabellenstruktur und Schema-Diff für Umgebungsvergleiche – all das steht ohne zusätzliche Software zur Verfügung.
Der größte Hebel ist die Nutzung von EXPLAIN PLAN direkt nach dem Schreiben von Queries. Statt Queries blind auszuführen und Performance-Probleme erst im Produktionsbetrieb zu entdecken, lässt sich jede Query im Entwicklungsprozess analysieren. Für Magento-Projekte mit EAV-Komplexität und Dutzenden von Joins in Collection-Klassen ist das ein fundamentaler Unterschied im Entwicklungsfluss.
SQL-Konsole und EXPLAIN PLAN in PhpStorm — Das Wichtigste auf einen Blick
Verbindung einrichten
Database-Tool-Window → + → MySQL → Docker-Port. Nur relevante Schemas indizieren, um die Startzeit zu minimieren.
EXPLAIN PLAN nutzen
Query in SQL-Konsole → Ctrl+Shift+E für visuellen EXPLAIN PLAN. Full Table Scans an Join-Typ ALL erkennen, Indizes ergänzen.
Schema-Diff
Zwei Datenbankinstanzen vergleichen, Migrationsskript generieren. Ideal für Umgebungsabgleich nach Extension-Installationen.
EAV-Navigation
Fremdschlüssel-Links im Database-Window für EAV-Struktur nutzen. Parameterisierte Queries für Attributwert-Abfragen mit :product_id.