Php 避免MySQL查询占用不必要的带宽

Php 避免MySQL查询占用不必要的带宽,php,mysql,Php,Mysql,我关心的是优化查询,尽可能减少查询后从数据库返回的数据量 假设我有两张桌子。一个叫“艺术家”,另一个叫“专辑” 假设“艺术家”表列为:id和name “相册”表列为:id,artist\u id,title 假设我想要一个页面来显示艺术家的名字作为标题。然后在下面,我想显示艺术家的专辑列表 我可以通过以下方式轻松完成: SELECT artists.name AS artist_name, albums.title AS album_title LEFT JOIN albums ON album

我关心的是优化查询,尽可能减少查询后从数据库返回的数据量

假设我有两张桌子。一个叫“艺术家”,另一个叫“专辑”

假设“艺术家”表列为:idname

“相册”表列为:idartist\u idtitle

假设我想要一个页面来显示艺术家的名字作为标题。然后在下面,我想显示艺术家的专辑列表

我可以通过以下方式轻松完成:

SELECT artists.name AS artist_name, albums.title AS album_title
LEFT JOIN albums
ON albums.artist_id = artists.id
WHERE artists.id = 3;
artist_name         |   album_title
                    |
Justin Bieber       |   My First Crappy Album
Justin Bieber       |   Another Crappy Album
Justin Bieber       |   Yet Another Crappy Album
artist_name         |   album_titles
Justin Bieber       |   Album1, Album2, Album3
这将给我一个结果,可能看起来像:

SELECT artists.name AS artist_name, albums.title AS album_title
LEFT JOIN albums
ON albums.artist_id = artists.id
WHERE artists.id = 3;
artist_name         |   album_title
                    |
Justin Bieber       |   My First Crappy Album
Justin Bieber       |   Another Crappy Album
Justin Bieber       |   Yet Another Crappy Album
artist_name         |   album_titles
Justin Bieber       |   Album1, Album2, Album3
这个结果的问题是,它多次将艺术家的名字还给我,而我实际上只需要它一次。我担心这种做法效率不高。特别是如果这位艺术家已经有很多专辑的话。我可能错了,如果我错了,请有人纠正我


无论如何,有没有更好的办法?一个不需要多次检索艺术家姓名的应用程序?

然后分别执行两个请求。 首先要求艺术家的名字

SELECT name
FROM artists
WHERE id = 3
然后是专辑的标题

SELECT title
FROM albums
WHERE artist_id = 3

我不知道php内部是否有日志记录,但您可以使用
microtime()

计算witch way是执行最快的方法。您可以使用聚合函数

SELECT ar.name AS artist_name, GROUP_CONCAT(al.title) AS album_titles
FROM artists ar, albums al
WHERE ar.id = al.artist_id
AND ar.id = 3
GROUP BY artist_name;
这会给你一些类似的信息:

SELECT artists.name AS artist_name, albums.title AS album_title
LEFT JOIN albums
ON albums.artist_id = artists.id
WHERE artists.id = 3;
artist_name         |   album_title
                    |
Justin Bieber       |   My First Crappy Album
Justin Bieber       |   Another Crappy Album
Justin Bieber       |   Yet Another Crappy Album
artist_name         |   album_titles
Justin Bieber       |   Album1, Album2, Album3
我已经有一段时间没有使用这个命令了,但是您可以在这里找到更多关于它的文档:

另外,我更喜欢在FROM子句中列出我的表,并使用WHERE子句连接它们,但这与上面的连接相同。。。只是不同的语法

是的,我不会担心那个“优化”。如果它让你感觉更好,把专辑的标题放在左边,艺术家的名字放在右边。这就是你从查询中得到的东西,知道我的意思吗?