MySQL のテーブルインデックスを最適化する
<p>次のテーブルがあります (検索の追跡): </p>
<pre class="brush:sql;toolbar:false;">CREATE TABLE `searches` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`削除された` 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、
主キー (`id`)、
KEY `key,deleted` (`publicId`,`deleted`)、
KEY `deleted,userId` (`deleted`,`userId`)、
KEY `deleted,`connectionId`,`pluginId` (`deleted`,`connectionId`,`pluginId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
</pre>
<p>特定のユーザーが実行したすべてのクエリを返すクエリを実行することがあります。この場合、deleted、userId の列を含むインデックスがあります。 <コード></コード></p>
<p>また、特定の「接続」と「プラグイン」によって実行されたすべてのクエリを返すクエリを実行することもあります。この場合、deleted、connectionId、pluginId の列を含むインデックスがあります。 <コード></コード></p>
<p>インデックスのサイズが大幅に増大しているため、インデックスをより適切に最適化する方法を理解しようとしています。 </p>
<p>これら 2 つのインデックスを 1 つにマージすることに価値はありますか?たとえば、次の列を含めることができます: <code>deleted</code>、<code>userId</code>、<code>connectionId</code>、<code>pluginId</code>< ;/p>
<p>これを行うと、クエリのニーズを満たしながらインデックスのサイズが削減されるかどうかはわかりません。 </p>