Maison > Article > base de données > Plusieurs situations d'échec de l'index MySQL
Situations courantes : 1. Utilisation de fonctions ou d'opérations ; 2. Conversion de type implicite ; 3. Utilisation de différent de (!= ou <>); 4. Utilisation de l'opérateur LIKE et démarrage par un caractère générique ; ; 6. Valeur NULL ; 7. Faible sélectivité de l'indice ; 8. Principe du préfixe le plus à gauche de l'indice composite ; 10. FORCE INDEX et IGNORE INDEX ;
Les index dans MySQL sont un outil important pour aider à optimiser les performances des requêtes, mais dans certains cas, l'index peut ne pas fonctionner comme prévu, c'est-à-dire qu'il "s'éteint".
Voici quelques situations courantes qui entraînent l'échec des index MySQL :
: lorsque des fonctions sont utilisées ou des opérations sont effectuées sur des colonnes indexées, l'index ne prend généralement pas effet. Par exemple :
SELECT * FROM users WHERE YEAR(date_column) = 2023;
Ici, YEAR(date_column) rend l'index invalide.
2. Conversion de type implicite : lorsque la conversion de type implicite est impliquée dans les conditions de requête, l'index ne peut pas être utilisé. Par exemple, si une colonne est de type chaîne mais est interrogée à l'aide de nombres, ou vice versa.
SELECT * FROM users WHERE id = '123'; -- 假设id是整数类型
Utiliser Not Equals (!= ou <>) : L'utilisation de l'opérateur Not Equals provoque généralement un échec de l'index car elle nécessite l'analyse de plusieurs valeurs de l'index.
SELECT * FROM users WHERE age != 25;
Utilisez l'opérateur LIKE et commencez par un caractère générique : Lorsque l'opérateur LIKE est utilisé et que le modèle commence par le caractère générique %, l'index ne prendra généralement pas effet.
SELECT * FROM users WHERE name LIKE '%Smith%';
Conditions OR : lors de l'utilisation de conditions OR, si toutes les colonnes impliquées ne sont pas indexées, ou si l'une des conditions provoque un échec de l'index, alors la requête entière ne peut pas utiliser l'index.
SELECT * FROM users WHERE age = 25 OR name = 'John';
NULL值:如果索引列包含NULL值,并且查询条件涉及到NULL,索引可能不会生效。
SELECT * FROM users WHERE age IS NULL;
为了避免索引失效,建议:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!