Tabellenindizes in MySQL optimieren
<p>Ich habe die folgende Tabelle (Tracking-Suchen): </p>
<pre class="brush:sql;toolbar:false;">CREATE TABLE `searches` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
„gelöscht“ tinyint(1) unsigned NOT NULL,
`query` varchar(1024) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`userId` int(10) unsigned NOT NULL,
`connectionId` int(10) unsigned NOT NULL,
`pluginId` int(10) unsigned NOT NULL,
PRIMÄRSCHLÜSSEL („id“),
SCHLÜSSEL `key,deleted` (`publicId`,`deleted`),
SCHLÜSSEL `deleted,userId` (`deleted`,`userId`),
SCHLÜSSEL `deleted,connectionId,pluginId` (`deleted`,`connectionId`,`pluginId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
</pre>
<p>Manchmal führe ich eine Abfrage aus, die alle von einem bestimmten Benutzer durchgeführten Abfragen zurückgibt. In diesem Fall habe ich einen Index mit den folgenden Spalten: gelöscht, Benutzer-ID. <code></code></p>
<p>In anderen Fällen führe ich Abfragen aus, die alle von einer bestimmten „Verbindung“ und einem bestimmten „Plugin“ ausgeführten Abfragen zurückgeben. In diesem Fall habe ich einen Index mit den folgenden Spalten: gelöscht, Verbindungs-ID, Plugin-ID. <code></code></p>
<p>Die Größe der Indizes nimmt erheblich zu, daher versuche ich zu verstehen, wie ich sie besser optimieren kann. </p>
<p>Ist es sinnvoll, diese beiden Indizes zu einem zusammenzuführen? Es könnte beispielsweise die folgenden Spalten enthalten: <code>deleted</code>,<code>userId</code>,<code>connectionId</code>,<code>pluginId</code>< ;/ p>
<p>Ich bin mir nicht sicher, ob dadurch die Größe des Index verringert wird und gleichzeitig die Abfrageanforderungen erfüllt werden. </p>