php - 我怎样才能使这个 SQL 查询更有效率? PHP

标签 php sql cakephp

我有一个系统,用户可以通过该系统查看他们单独订阅的类别,以及默认情况下在他们所属地区可用的类别。

因此,表格如下: 类别 用户类别 地区分类

我正在数据库中查询他们区域内的所有类别,以及他们订阅的所有单独类别。

我的查询如下:

        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/

相关文章:

php - 减少圈复杂度的过多 switch case 的替代方案?

mysql - mysql上运行sql慢

cakephp - 检查 CakePHP3.5 中是否存在记录

php - 如何在CakePHP中保存日期时间格式(将日期从JS传递给CakePHP)

cakephp - 在 CakePHP 2 中制作 phpunit.xml

php - 如何通过 PHP 检查我的脚本是否连接到 SMTP 服务器

php - Twig - 不要逃脱 '&'

javascript - 我希望我的 php 表单在同一页面但不同的选项卡上提交数据和重定向

MySQL如何在没有过程/函数的情况下执行命令 block

sql - 如果函数不存在则创建一个函数,如果函数已经存在则更改函数