为group_concat函数优化MySQL查询

jskidd3
SELECT SQL_NO_CACHE link.stop, stop.common_name, locality.name, stop.bearing, stop.latitude, stop.longitude
FROM service
JOIN pattern ON pattern.service = service.code
JOIN link ON link.section = pattern.section
JOIN naptan.stop ON stop.atco_code = link.stop
JOIN naptan.locality ON locality.code = stop.nptg_locality_ref
GROUP BY link.stop

上面的查询大约需要800毫秒-1000毫秒才能运行。

如果我追加一条group_concat语句,查询将花费8到10秒:

SELECT SQL_NO_CACHE link.stop, link.stop, stop.common_name, locality.name, stop.bearing, stop.latitude, stop.longitude, group_concat(service.line) lines

我如何更改此查询,以使其在不到2秒的时间内运行该group_concat语句?

SQL小提琴:http://sqlfiddle.com/#!9 / 414fe

EXPLAIN这两个查询的声明:http : //i.imgur.com/qrURgzV.png

戈登·利诺夫

此查询需要多长时间?

SELECT p.section, GROUP_CONCAT(s.line)
FROM pattern p join
     service s
     ON p.service = s.code
GROUP BY p.section

我认为您可以group_concat()在子查询中进行操作,因此外部查询不需要聚合。当子查询中有一个表时,这可以加快查询速度。就您而言,有两个。

最终结果将类似于:

link.section = pattern.section

SELECT SQL_NO_CACHE . . .,
       (SELECT GROUP_CONCAT(s.line)
        FROM pattern p join
             service s
             ON p.service = s.code
        WHERE p.section = link.section
       ) as lines
FROM link JOIN
     naptan.stop
     ON stop.atco_code = link.stop JOIN
     naptan.locality
     ON locality.code = stop.nptg_locality_ref;

对于此查询,您需要以下附加索引:pattern(section, service)service(code, line)

我不知道这是否行得通,但是值得一试。

注意:这是假设您确实不需要group by其余的列。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL GROUP_CONCAT和IN查询

来自分类Dev

MySQL查询加入group_concat

来自分类Dev

来自子查询的MySQL GROUP_CONCAT

来自分类Dev

mysql group_concat重复键和1次查询中多列重复的次数(查询优化)

来自分类Dev

在MySQL上的SQL中优化GROUP_CONCAT

来自分类Dev

mysql JOIN与GROUP_CONCAT在复杂的查询中

来自分类Dev

结合使用MYSQL GROUP_CONCAT和子查询

来自分类Dev

从大型生成的查询修剪尾随mysql group_concat

来自分类Dev

使用IN与group_concat结果进行MySQL查询

来自分类Dev

结合使用MYSQL GROUP_CONCAT和子查询

来自分类Dev

mysql group_concat查询给出错误

来自分类Dev

MySQL查询中GROUP_CONCAT AND ORDER BY FIELD的问题

来自分类Dev

如何在MySQL,Group_Concat中处理这样的查询?

来自分类Dev

在mysql中使用GROUP_CONCAT选择查询

来自分类Dev

在 JOIN 查询中使用 Mysql GROUP_CONCAT

来自分类Dev

在MySQL中聚合函数GROUP_CONCAT(expr)

来自分类Dev

在MySQL中聚合函数GROUP_CONCAT(expr)

来自分类Dev

MySQL group_concat与联接

来自分类Dev

MySQL:嵌套的GROUP_CONCAT

来自分类Dev

MySQL group_concat问题

来自分类Dev

MySQL Group_Concat 不在

来自分类Dev

MySQL-优化-使用具有多个的group_concat和联接

来自分类Dev

Mysql with Group by + IF + Left Join + Group_Concat

来自分类Dev

sql group_concat和子查询

来自分类Dev

优化 MySQL GROUP BY 查询

来自分类Dev

如何在 mysql 的 Group_concat 子查询中使用选择查询

来自分类Dev

mysql内部连接group_concat mysql

来自分类Dev

找不到函数:group_concat

来自分类Dev

MySQL多个group_concat命令保存