Optimumkan indeks jadual dalam MySQL
P粉841870942
2023-07-25 09:47:08
<p>Saya mempunyai jadual berikut (menjejaki carian): </p>
<pre class="brush:sql;toolbar:false;">BUAT JADUAL `carian` (
`id` int(10) tidak ditandatangani BUKAN NULL AUTO_INCREMENT,
`dipadam` tinyint(1) tidak ditandatangani BUKAN NULL,
`pertanyaan` varchar(1024) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`userId` int(10) tidak ditandatangani BUKAN NULL,
`connectionId` int(10) unsigned NOT NULL,
`pluginId` int(10) tidak ditandatangani BUKAN NULL,
KUNCI UTAMA (`id`),
KEY `key,deleted` (`publicId`,`deleted`),
KEY `dipadamkan,userId` (`dipadam`,`userId`),
KEY `deleted,connectionId,pluginId` (`deleted`,`connectionId`,`pluginId`)
) ENJIN=CHARSET LALAI InnoDB=utf8mb4 COLLATE=utf8mb4_unicode_ci;
</pra>
<p>Kadangkala saya menjalankan pertanyaan yang mengembalikan semua pertanyaan yang dilakukan oleh pengguna tertentu. Dalam kes ini saya mempunyai indeks dengan lajur berikut: dipadam, userId. <kod></kod></p>
<p>Pada masa lain, saya menjalankan pertanyaan yang mengembalikan semua pertanyaan yang dilaksanakan oleh "sambungan" dan "plugin" tertentu. Dalam kes ini saya mempunyai indeks dengan lajur berikut: dipadamkan, connectionId, pluginId. <kod></code></p>
<p>Saiz indeks berkembang dengan ketara, jadi saya cuba memahami cara untuk mengoptimumkannya dengan lebih baik. </p>
<p>Adakah terdapat nilai dalam menggabungkan kedua-dua indeks ini menjadi satu? Sebagai contoh, ia boleh mengandungi lajur berikut: <code>deleted</code>,<code>userId</code>,<code>connectionId</code>,<code>pluginId</code> ;/ p>
<p>Saya tidak pasti sama ada melakukan ini akan mengurangkan saiz indeks sementara masih memenuhi keperluan pertanyaan. </p>
Anda boleh menggunakan indeks beberapa kali, tetapi hanya dari kiri ke kanan, tanpa melangkau sebarang medan. Contohnya: indeks (medan A, medan B, medan C), maka anda boleh menggunakan indeks ini untuk menanyakan medan A, atau medan pertanyaan A dan medan B, atau medan pertanyaan A, medan B dan medan C, tetapi ia tidak boleh digunakan Akses ke medan A dan medan C atau medan B dan medan C.
Jadi ini tidak berkenaan dengan pertanyaan anda.