ホームページ  >  に質問  >  本文

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>
P粉841870942P粉841870942452日前545

全員に返信(1)返信します

  • P粉269847997

    P粉2698479972023-07-26 00:56:46

    インデックスは複数回使用できますが、左から右にのみ使用でき、フィールドをスキップすることはできません。例: インデックス (フィールド A、フィールド B、フィールド C) の場合、このインデックスを使用してフィールド A をクエリしたり、フィールド A とフィールド B をクエリしたり、フィールド A、フィールド B とフィールド C をクエリしたりできますが、使用することはできません。フィールド A とフィールド C、またはフィールド B とフィールド C へのアクセス。

    したがって、これはあなたのクエリには当てはまりません。


    返事
    0
  • キャンセル返事