请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请教老师,sql性能问题

SELECT p.permission_name
FROM tb_user u
JOIN tb_role r ON JSON_CONTAINS(u.role, CAST(r.id AS CHAR))
JOIN tb_permission p ON JSON_CONTAINS(r.permissions, CAST(p.id AS CHAR))
WHERE u.id = 用户ID AND u.status = 1;
先做表连接再查询是否会影响性能,还是说mysql会自动优化

正在回答 回答被采纳积分+3

1回答

神思者 2023-02-13 10:42:28

你这个问题搞得我不知道怎么回答,MySQL不做表连接,难道都是单表操作么?我建议你百度一下MySQL表连接基准表,MySQL做表连接的时候会挑选数据最少的表作为基准表,然后去连接其他数据表,所以性能上是有保证的。

0 回复 有任何疑惑可以回复我~
  • 提问者 七訫 #1
    SELECT p.permission_name
    FROM (select *from tb_user  WHERE id = 用户ID AND status = 1) u
    JOIN tb_role r ON JSON_CONTAINS(u.role, CAST(r.id AS CHAR))
    JOIN tb_permission p ON JSON_CONTAINS(r.permissions, CAST(p.id AS CHAR));我表述有点问题,想问的是先用子查询生成一个临时表,再进行表连接,在性能上会不会有差别
    回复 有任何疑惑可以回复我~ 2023-02-13 11:14:16
  • 神思者 回复 提问者 七訫 #2
    没必要,MySQL会自动选择基准表。除非是子查询才这么优化,不是子查询不用这么做
    回复 有任何疑惑可以回复我~ 2023-02-13 14:48:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信