Maison >base de données >tutoriel mysql >Comment optimiser les requêtes pour les colonnes séparées par des virgules dans les bases de données ?

Comment optimiser les requêtes pour les colonnes séparées par des virgules dans les bases de données ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-30 15:03:03261parcourir

How to Optimize Queries for Comma-Separated Columns in Databases?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn