首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当有限制5时加入vs多个查询

当有限制5时加入vs多个查询
EN

Stack Overflow用户
提问于 2016-12-05 11:25:17
回答 2查看 99关注 0票数 0

我有两张桌子如下所示:

代码语言:javascript
复制
// posts
+----+---------+------------------+-----------+
| id |  title  |      content     | author_id |
+----+---------+------------------+-----------+
| 1  | title1  | content1         | 123       |
| 2  | title2  | content2         | 456       |
| .  | .       | .                | .         |
| .  | .       | .                | .         |
| .  | .       | .                | .         |
+----+---------+------------------+-----------+

// users
+----+-------+
| id |  name |
+----+-------+
| 1  | Jack  |
| 2  | Peter |
| .  | .     |
| .  | .     |
| .  | .     |
+----+-------+

我想选择以下5个职位:

代码语言:javascript
复制
SELECT * FROM posts WHERE 1 ORDER BY id LIMIT 5

我还需要得到每一篇文章的作者姓名。因此,我可以通过使用这样的JOIN来做到这一点:

代码语言:javascript
复制
SELECT p.*, u.name
FROM posts p
JOIN users ON p.author_id = u.id
WHERE 1
ORDER BY id
LIMIT 5

我可以用另一种方式:

代码语言:javascript
复制
SELECT * FROM posts WHERE 1 ORDER BY id LIMIT 5
// storing results in a PHP array named $results
foreach( $results as $result ) {
    SELECT name FROM users WHERE id =  $result['author_id']
    // storing results in a PHP array named $names
}
// combining $names and $results to make expecting result

那么,哪种方法对大型数据集更有效?换句话说,JOIN发生在LIMIT之前吗?如果是的话,那么我想用PHP做这个会更快,我错了吗?

EN

回答 2

Stack Overflow用户

发布于 2016-12-05 11:29:52

引擎可以指定自己的实现,但是MySQL不会读取整个表:它将与JOIN同时执行LIMIT,在找到5行之前逐行提取。

票数 1
EN

Stack Overflow用户

发布于 2016-12-05 11:37:23

MySQL Engine:InnoDB在表中使用行级锁定,然后限制将与JOIN同时工作,逐行获取,直到找到5行为止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40973164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档