我有两张桌子如下所示:
// posts
+----+---------+------------------+-----------+
| id | title | content | author_id |
+----+---------+------------------+-----------+
| 1 | title1 | content1 | 123 |
| 2 | title2 | content2 | 456 |
| . | . | . | . |
| . | . | . | . |
| . | . | . | . |
+----+---------+------------------+-----------+
// users
+----+-------+
| id | name |
+----+-------+
| 1 | Jack |
| 2 | Peter |
| . | . |
| . | . |
| . | . |
+----+-------+我想选择以下5个职位:
SELECT * FROM posts WHERE 1 ORDER BY id LIMIT 5我还需要得到每一篇文章的作者姓名。因此,我可以通过使用这样的JOIN来做到这一点:
SELECT p.*, u.name
FROM posts p
JOIN users ON p.author_id = u.id
WHERE 1
ORDER BY id
LIMIT 5我可以用另一种方式:
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做这个会更快,我错了吗?
发布于 2016-12-05 11:29:52
引擎可以指定自己的实现,但是MySQL不会读取整个表:它将与JOIN同时执行LIMIT,在找到5行之前逐行提取。
发布于 2016-12-05 11:37:23
MySQL Engine:InnoDB在表中使用行级锁定,然后限制将与JOIN同时工作,逐行获取,直到找到5行为止。
https://stackoverflow.com/questions/40973164
复制相似问题