搜尋

首頁  >  問答  >  主體

在MySQL中優化表的索引

<p>我有以下表格(tracking searches):</p> <pre class="brush:sql;toolbar:false;">CREATE TABLE `searches` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `deleted` 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, PRIMARY KEY (`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。 <code></code></p> <p>其他時候,我執行查詢來傳回特定「連線」和「外掛」執行的所有查詢。在這種情況下,我有一個索引,包含以下列:deleted, connectionId, pluginId。 <code></code></p> <p>索引的大小正在顯著增長,因此我正在嘗試了解如何更好地優化它們。 </p> <p>將這兩個索引合併為一個索引是否有價值?例如,它可以包含以下列: <code>deleted</code>,<code>userId</code>,<code>connectionId</code>,<code>pluginId</code>/code>,<code>pluginId</code> p> <p>我不確定這樣做是否會在滿足查詢需求的同時減少索引的大小。 </p>
P粉841870942P粉841870942497 天前586

全部回覆(1)我來回復

  • P粉269847997

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

    您可以多次使用一個索引,但只能從左到右使用,不能跳過任何欄位。例如:索引(字段A,字段B,字段C),那麼您可以使用該索引進行字段A的查詢,或者字段A和字段B的查詢,或者字段A、字段B和字段C的查詢,但不能用於字段A和字段C或字段B和字段C的訪問。

    因此,這對於您的查詢是不適用的。


    回覆
    0
  • 取消回覆