Ma requête mysql ressemble à ceci:Requête de réécriture pour supprimer FIND_IN_SET?
SELECT pages.*,
showcase.*,
project.*
FROM pages
INNER JOIN showcase ON showcase.pid = pages.uid AND showcase.deleted != 1
INNER JOIN project ON FIND_IN_SET(project.uid, showcase.projects)
WHERE pages.deleted != 1
AND pages.pid = 14
AND pages.dokType = 150
Le problème est le deuxième INNER JOIN
- il utilise FIND_IN_SET
parce une vitrine (= collection de projets) stocke ses projets en tant que séparés par des virgules liste dans le champ showcase.projects
. FIND_IN_SET
ne peut pas utiliser d'index autant que je sache, donc la deuxième jointure nécessite une analyse de table complète de la table de projet. Toute possibilité d'utiliser un index sans changer le schéma de base de données?
En supposant que vous avez raison, je vais commencer à normaliser les données lundi. Sûrement la meilleure solution. – Max
Bonne chance. Il suffit de ne pas dévalider la normalisation :) Il peut introduire des performances/traiter des problèmes de données dans le futur. –