加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 在MySQL中编写子查询是一个好习惯吗?

发布时间:2020-12-13 22:19:34 所属栏目:PHP教程 来源:网络整理
导读:我正在编写以下子查询以用于某些项目特定目的: SELECT count(*) from table1 WHERE userB='$p' AND userA IN (SELECT userB FROM table1 WHERE userA='$row[username]') 我很好奇这是用PHP做的最好的做法还是我应该采用传统方式首先得到子查询结果然后计算
我正在编写以下子查询以用于某些项目特定目的:

SELECT count(*) from table1 
WHERE userB='$p' AND userA IN 
  (SELECT userB FROM table1 
   WHERE userA='$row[username]')

我很好奇这是用PHP做的最好的做法还是我应该采用传统方式首先得到子查询结果然后计算记录?

解决方法

I was curious if this was the best practice when doing it in PHP or should I resort to the conventional way of first getting the subquery result and then counting the records?

将SQL查询保留在PHP或存储过程圣战中,最少的数据库访问是最佳实践.有时间到数据库&无法恢复的后退,并且分离查询会在查询之间存在数据更改的风险.

查询本身可以优化吗?在这个例子中,可能是的:

SELECT COUNT(*) 
  FROM TABLE t
  JOIN TABLE t2 ON t2.userB = t.userA
               AND t2.userA = '$row[username]'
 WHERE t.userB = '$p'

如果您真的想确定查询性能,那么您必须熟悉生成解释计划&解释输出以调整查询.

什么是解释计划?

MySQL解释计划显示了MySQL查询优化器如何决定运行SELECT语句以便最好地访问已请求的数据.

如何生成解释计划?

在MySQL中,您只需在SELECT关键字之前将关键字explain添加到SELECT查询中. IE:

EXPLAIN SELECT COUNT(*)
          FROM TABLE t
          JOIN TABLE t2 ON t2.userB = t.userA
                       AND t2.userA = '$row[username]'
         WHERE t.userB = '$p'

可能应该早些提到过这个,但是你不想在PHP中运行它,因为它不会返回你查询的内容.使用任何SQL IDE,如PHPMyAdmin / etc.

我有我的解释计划,但它意味着什么?!

MySQL EXPLAIN documentation是一个阅读每个返回列的好地方,&列代表什么.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读