Optimisation des requêtes pour les colonnes séparées par des virgules
Les tables de base de données contiennent souvent des colonnes avec des listes de valeurs séparées par des virgules, ce qui crée des problèmes lors des requêtes spécifiques valeurs. Considérons un tableau avec une colonne "CATÉGORIES" au format suivant :
ID | CATEGORIES --------------- 1 | c1 2 | c2,c3 3 | c3,c2 4 | c3 5 | c4,c8,c5,c100
Pour rechercher des catégories spécifiques, vous pouvez dans un premier temps opter pour des instructions LIKE :
SELECT id FROM table WHERE categories LIKE '%c2%'; -- Returns rows 2 and 3
Cependant, les instructions LIKE peut être inefficace pour les colonnes séparées par des virgules. La fonction FIND_IN_SET() d'Oracle peut sembler une alternative appropriée, mais elle n'est pas disponible dans Oracle 10g.
Une approche plus optimale consiste à utiliser LIKE avec les caractères génériques appropriés :
SELECT * FROM YourTable WHERE ',' || CommaSeparatedValueColumn || ',' LIKE '%,SearchValue,%'
Cette requête ajoute des virgules autour de la valeur de recherche pour garantir des correspondances exactes. Cependant, cela peut encore être lent en raison de l'utilisation de LIKE.
Une solution supérieure consiste à restructurer les données en tables séparées avec des liaisons croisées pour éviter les limitations des colonnes séparées par des virgules, améliorant ainsi considérablement les performances des requêtes.
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!