Php 避免MySQL查询占用不必要的带宽
我关心的是优化查询,尽可能减少查询后从数据库返回的数据量 假设我有两张桌子。一个叫“艺术家”,另一个叫“专辑” 假设“艺术家”表列为:id和name “相册”表列为:id,artist\u id,title 假设我想要一个页面来显示艺术家的名字作为标题。然后在下面,我想显示艺术家的专辑列表 我可以通过以下方式轻松完成: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
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子句连接它们,但这与上面的连接相同。。。只是不同的语法 是的,我不会担心那个“优化”。如果它让你感觉更好,把专辑的标题放在左边,艺术家的名字放在右边。这就是你从查询中得到的东西,知道我的意思吗?