J'ai le tableau suivant (recherches de suivi) :
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é>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.
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.
La taille des index augmente considérablement. J'essaie donc de comprendre comment mieux les optimiser.
Est-il utile de fusionner ces deux index en un seul ? Par exemple, il peut contenir les colonnes suivantes :
deleted
,userId
,connectionId
,pluginId
< ;/p>Je ne sais pas si cela réduira la taille de l'index tout en répondant aux besoins de la requête.
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.