Я хочу извлечь всех персон, у которых есть 'valeur_lisible', или 'lnk_attributs_objets.valeur' или 'attribut.nom', равный '% gingivite%'.
Мой запрос выглядит так:
SELECT DISTINCT ID_PERSONNE, PER_NOM, PER_PRENOM
FROM personne
LEFT JOIN instance_fiche_personnalisee ON (personne.id_personne=instance_fiche_personnalisee.id_patient)
LEFT JOIN objet ON (objet.id_patient = personne.id_personne)
LEFT JOIN datas_instance_fiche_perso ON (instance_fiche_personnalisee.id_instance = datas_instance_fiche_perso.id_instance)
LEFT JOIN lnk_attributs_objets ON (objet.pk_objet = lnk_attributs_objets.id_objet)
LEFT JOIN attributs ON (lnk_attributs_objets.id_attribut = attributs.pk_attribut)
WHERE (LOWER(datas_instance_fiche_perso.valeur_lisible) like '%gingivite%')
OR (LOWER(lnk_attributs_objets.valeur) like '%gingivite%')
OR (LOWER(attributs.nom) like '%gingivite%')
В моей небольшой базе данных (926 человек) уже около 4 с.
Есть ли способ оптимизировать мой запрос?
Я новичок в SQL.
Примечание: я использовал LEFT JOIN, потому что у человека может быть valeur_lisible, но нет объектов (атрибуты связаны с объектами) и наоборот.
РЕДАКТИРОВАТЬ: Это схема отношений междутаблицы:
Я выделил синим цветом значения, которые я хочу проверить как гингивит.