Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用子查询是在不相关的表上使用GROUP_CONCAT()的最佳方式吗?_Mysql_Sql_Query Optimization - Fatal编程技术网

Mysql 使用子查询是在不相关的表上使用GROUP_CONCAT()的最佳方式吗?

Mysql 使用子查询是在不相关的表上使用GROUP_CONCAT()的最佳方式吗?,mysql,sql,query-optimization,Mysql,Sql,Query Optimization,在这个查询中 SELECT username, (SELECT GROUP_CONCAT(color) FROM colors) FROM users WHERE id = 1; 这是从表颜色中获取所有颜色的最佳且唯一的方法吗?我想不出一种方法来索引颜色表以使其快速,所以我有我的顾虑 users: id(int(11), Primary), username(varchar(12), Unique) colors: id(int(11), Primary), color(varchar(12)

在这个查询中

SELECT username, (SELECT GROUP_CONCAT(color) FROM colors) FROM users WHERE id = 1;
这是从表
颜色
中获取所有
颜色的最佳且唯一的方法吗?我想不出一种方法来索引
颜色
表以使其快速,所以我有我的顾虑

users: id(int(11), Primary), username(varchar(12), Unique)
colors: id(int(11), Primary), color(varchar(12), Unique)

示例:

您的查询基本上是唯一的选项

您可以将子查询移动到
FROM
子句。这将保证它只执行一次。但是,您只选择了一行,因此应该只执行一次

你为什么认为查询速度慢?如果
组的默认长度为1024个字符,则不能将这么多的值聚合在一起

嗯,还有一个选择:

select u.*, c.colors
from users u cross join
     (select @c as colors
      from (select @c := concat(@c, ',', c.color)
            from colors c cross join
                 (select @c := '') params
           ) c
      limit 1
     ) c
where u.id = 1;

如果这能提供更好的性能,我会感到惊讶。

用您正在使用的数据库标记您的问题。样本数据和期望的结果也会有帮助。@GordonLinoff更新以添加样本和标签。去掉
颜色中的
id
;将
color
提升为主键。(这不会解决问题。)@RickJames以前从未使用过PK,现在将检查它们的工作方式并听从您的建议。我希望
解释
使用
唯一键
或其他什么,但奇怪的是它没有,所以我担心我使用
子查询做得不对。如果可能,我想了解如何将其从
移动到