我有一个系统,用户可以通过该系统查看他们单独订阅的类别,以及默认情况下在他们所属地区可用的类别。
因此,表格如下: 类别 用户类别 地区分类
我正在数据库中查询他们区域内的所有类别,以及他们订阅的所有单独类别。
我的查询如下:
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 = ?)
至少我相信那是查询,我正在使用 Cake 的 ORM 层创建它,所以确切的是:
$conditions = array(
array( "OR" => array (
'RegionsCategories.region_id' => $region_id,
'UsersCategories.user_id' => $user_id
)
));
$this->find('all', $conditions);
事实证明这非常慢(有时大约 20 秒左右。每个表大约有 5,000 行)。我的设计在这里有问题吗?
如何在一次查询中同时检索用户的个人类别和他们所在地区的类别而不需要花费时间?
谢谢!
最佳答案
确保 categories.id、users_categories.category_id、users_categories.user_id、regions_categories.category_id 和 regions_categories.region_id 列都已编入索引。
关于php - 我怎样才能使这个 SQL 查询更有效率? PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503335/