Optimiser les index de table dans MySQL
P粉841870942
2023-07-25 09:47:08
<p>J'ai le tableau suivant (recherches de suivi) : </p>
<pre class="brush:sql;toolbar:false;">CREATE TABLE `recherches` (
`id` int(10) non signé NOT NULL AUTO_INCREMENT,
`supprimé` tinyint(1) non signé NOT NULL,
`query` varchar(1024) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`userId` int(10) non signé NOT NULL,
`connectionId` int(10) non signé NOT NULL,
`pluginId` int(10) non signé NOT NULL,
CLÉ PRIMAIRE (`id`),
CLÉ `clé, supprimée` (`publicId`,`supprimé`),
CLÉ `supprimé, userId` (`supprimé`,`userId`),
CLÉ `supprimé,connectionId,pluginId` (`supprimé`,`connectionId`,`pluginId`)
) MOTEUR=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
≪/pré>
<p>Parfois, j'exécute une requête qui renvoie toutes les requêtes effectuées par un utilisateur spécifique. Dans ce cas, j'ai un index avec les colonnes suivantes : supprimé, userId. <code></code></p>
<p>D'autres fois, j'exécute des requêtes qui renvoient toutes les requêtes exécutées par une "connexion" et un "plug-in" spécifiques. Dans ce cas, j'ai un index avec les colonnes suivantes : supprimé, connectionId, pluginId. <code></code></p>
<p>La taille des index augmente considérablement. J'essaie donc de comprendre comment mieux les optimiser. </p>
<p>Est-il utile de fusionner ces deux index en un seul ? Par exemple, il peut contenir les colonnes suivantes : <code>deleted</code>,<code>userId</code>,<code>connectionId</code>,<code>pluginId</code>< ;/p>
<p>Je ne sais pas si cela réduira la taille de l'index tout en répondant aux besoins de la requête. </p>
Vous pouvez utiliser un index plusieurs fois, mais uniquement de gauche à droite, sans sauter aucun champ. Par exemple : index (champ A, champ B, champ C), alors vous pouvez utiliser cet index pour interroger le champ A, ou interroger le champ A et le champ B, ou interroger le champ A, le champ B et le champ C, mais il ne peut pas être utilisé Accès au champ A et au champ C ou au champ B et au champ C.
Ceci ne s'applique donc pas à votre requête.