gpt4 book ai didi

mysql - 如何优化使用 IN 的 MySQL

转载 作者:行者123 更新时间:2023-11-29 13:08:24 24 4
gpt4 key购买 nike

我有 3 张 table :

程序(有关不同内部程序的某种信息)

procedure_department(链接表,每个过程对哪个部门有效)

权限(每个用户可以添加/编辑/删除他有权限的程序)

我愿意选择当前用户有权访问或自己添加的所有过程。

$sql = "SELECT p.id, p.name, p.type, p.status
FROM procedures AS p
LEFT JOIN procedure_department AS pd ON p.id = pd.procedureID
WHERE p.addedBy = 47 OR pd.departmentID IN (SELECT `option` FROM permissions WHERE user = 47 AND module = 'info' AND permission = 'add') ";

但是执行需要数年时间,我希望看到任何从结构或查询角度进行优化的建议。

最佳答案

尽管这个问题已在最新版本中得到修复,但某些版本的 MySQL 在使用子查询优化 in 方面表现不佳。您可以将其替换为 exists:

SELECT p.id, p.name, p.type, p.status
FROM procedures p LEFT JOIN
procedure_department pd
ON p.id = pd.procedureID
WHERE p.addedBy = 47 OR
exists (SELECT 1
FROM permissions
WHERE user = 47 AND module = 'info' AND permission = 'add' and
option = pd.departmentID
);

为了获得最佳性能,请在权限(选项、用户、模块、权限)上添加索引。

关于mysql - 如何优化使用 IN 的 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22404184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com