J'ai un système par lequel un utilisateur peut voir les catégories auxquelles il s'est abonné individuellement, ainsi que celles qui sont disponibles dans la région à laquelle il appartient par défaut.Comment rendre cette requête SQL plus efficace? PHP
Ainsi, les tableaux sont les suivants: Catégories UsersCategories RegionsCategories
J'interrogent les bases db pour toutes les catégories dans leur région, ainsi que toutes les catégories individuelles qu'ils ont souscrites.
Ma requête est la suivante:
Select * FROM (categories c)
LEFT JOIN users_categories uc on uc.category_id = c.id
LEFT JOIN regions_categories rc on rc.category_id = c.id
WHERE (rc.region_id = ? OR uc.user_id = ?)
Je crois au moins c'est la requête, je crée à l'aide de la couche ORM de gâteau, de sorte que l'exact est:
$conditions = array(
array("OR" => array (
'RegionsCategories.region_id' => $region_id,
'UsersCategories.user_id' => $user_id
)
));
$this->find('all', $conditions);
Ce tour pour être incroyablement lent (parfois environ 20 secondes environ, chaque table a environ 5 000 lignes). Mon design est-il en faute ici?
Comment puis-je récupérer les catégories individuelles des utilisateurs et celles de leur région en une seule requête sans que cela ne prenne de temps?
Merci!
Vous êtes une star, travaillé comme un charme. J'aurais probablement dû le savoir. Ta v.much. –
Oui, j'ai eu des requêtes qui vont de près d'une minute à un dixième de seconde en indexant les bons champs. Content que ça a marché! – jmans