MySQL - mehrere Spalte index
Lerne ich MySQL index und festgestellt, dass die index angewendet werden sollte, um jede Spalte in der WHERE-Klausel einer SELECT-Abfrage.
Dann fand ich Multiple-Column-Index vs Mehrere Indizes.
Ersten Q, ich Frage mich, was ist mit mehreren Spalten-index. Ich fand code Balg von Joomla, wird diese mit Mehreren Spalten-Index?
CREATE TABLE `extensions` (
`extension_id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
`type` VARCHAR(20) NOT NULL,
`element` VARCHAR(100) NOT NULL,
`folder` VARCHAR(100) NOT NULL,
`client_id` TINYINT(3) NOT NULL,
... ...
PRIMARY KEY (`extension_id`),
// does code below is multiple column index?
INDEX `element_clientid` (`element`, `client_id`),
INDEX `element_folder_clientid` (`element`, `folder`, `client_id`),
INDEX `extension` (`type`, `element`, `folder`, `client_id`)
)
Zweite Q, bin ich korrekt, wenn die denken, dass eine Multiple-Column-Index verwendet wird, auf eine WÄHLEN ?
SELECT column_x WHERE element=y AND clinet_id=y; // index: element_clientid
SELECT ex.col_a, tb.col_b
FROM extensions ex
LEFT JOIN table2 tb
ON (ex.ext_id = tb.ext_id)
WHERE ex.element=x AND ex.folder=y AND ex.client_id=z; // index: element_folder_clientid
Du musst angemeldet sein, um einen Kommentar abzugeben.
Allgemeine Faustregel für die Indizes zu schlagen, auf jedem Feld verwendet in einer
WHERE
oderJOIN
- Klausel.That being said, es gibt einige Optimierungen, die Sie tun können. Wenn Sie WISSEN, dass eine bestimmte Kombination von Feldern sind der einzige, der jemals verwendet werden, in DENEN für eine bestimmte Tabelle, dann erstellen Sie ein einziges multi-Feld-Taste, auf die nur die Felder, z.B.
v. s.
Einem multi-Feld-index kann es effizienter sein, in vielen Fällen, v. s mit Scannen mehrere Indizes. Der Nachteil ist, dass der multi-Feld-index ist nur nutzbar, wenn Sie die Felder in Frage, die sind eigentlich in einer WHERE Klausel verwendet.
Mit Ihrer Probe Abfragen, da
element
undfield_id
sind in allen drei Indizes, könnten Sie besser dran, splitten Sie Sie Weg in Ihrem eigenen index. Wenn diese Felder sind veränderbar, dann ist es besser, es zu halten Ihren eigenen index. z.B. wenn Sie jemals ändern müssenfield_id
in der Masse, die DB zu aktualisieren 3 verschiedene Indizes, v. s. Aktualisierung nur einen für einen.Aber es kommt alles darauf an benchmarking - testen Sie Ihre Installation mit verschiedenen index-setups und sehen, welche am besten abschneidet. Regeln der Daumen sind praktisch, aber funktionieren nicht 100% der Zeit.