这里先说一下发生的背景,线下数据也就一百条不到的数据,用到了group_concat组合之后的模糊查询,这时数据效率感觉没啥,还好,但是到了线上,发现一条的查询效率是两秒多,非常慢,测试小姐姐提出了优化,算是一个小优化吧,纯粹的语句优化,没有加索引啥的
下面直接介绍云端的情况吧,数据库二十万数据不到
原始的sql
SELECT
SELECT
p.id,
p.NAME,
p.nick_name AS nickName,
p.tel,
p.attentions,
p.identity,
p.stage,
p.option_time AS optionTime,
p.create_time AS createTime,
GROUP_CONCAT( b.`name` ) AS label
patient_identity p
LEFT JOIN patient_data_label l ON p.id = l.patient_id
LEFT JOIN basicdata_label b ON b.id = l.label_id
GROUP BY
WHERE
label LIKE '%aa%'
优化后的sql
SELECT
p.id,
p.NAME,
p.nick_name AS nickName,
p.tel,
p.attentions,
p.identity,
p.stage,
p.option_time AS optionTime,
p.create_time AS createTime,
GROUP_CONCAT( b.`name` ) AS label
patient_identity p
LEFT JOIN patient_data_label l ON p.id = l.patient_id
LEFT JOIN basicdata_label b ON b.id = l.label_id
WHERE
p.id IN ( SELECT l.patient_id FROM patient_data_label l LEFT JOIN basicdata_label b ON b.id = l.label_id WHERE b.`name` LIKE '%aa%' )
GROUP BY
看看,看看,吓一跳,这个效率简直了,所以,sql的优化真的很重要
不过这个说白了,也就是先筛选后分组,不能先分组再筛选,这样效率会很低
在工作中我们或多或少都会使用到函数group_concat,它可以合并多行的某列(或多列)数据为一行,默认以逗号分隔。最近碰到了一个线上bug,查询DB时返回的结果信息mysql自动截取了,导致页面显示的时候只显示了前半段结果。查询结果:我们可以看到MySql自动截取了我们返回结果的长度。为了方便测试,我们把本次回话的配置改为10个字节大小。group_concat_max_len参数。先说结论:MySql通过设置。函数结果字符串的最大长度。参数大小为1024个字节。
我有以下查询.这个想法是它允许我知道哪些组以及随后的用户可以访问每个component_instance.我想知道是否有更好的方法来做这个查询是相当缓慢的,但每次处理这个表时,这些额外的列是非常有用的:SELECT component_instances.*,GROUP_CONCAT(DISTINCT IF(permissions.view, groups.id, NULL)) AS view_g...
周师项目:视图查询
SELECT CONCAT("case ",GROUP_CONCAT(CONCAT("when JGDM = '",t.`DM`,"' then '",t.`MC`,"'") SEPARATOR ' ')," else '' end as JGDM ,") FRO
1.使用GROUP BY 分组 加HAVING条件
(因为where关键字无法与合计函数一起使用,例如sum(),avg()等,所以当有条件的话,需要放在having下)
下面展示一些 内联代码片。
// An highlighted block
SELECT
v.id,
v.video_name,
CONCAT(v.video_hour,':',v.video_minutes,':' ,v.video_seconds) videolength,
v.video_hour,
数据库的设计是这样的:n 条不一样的数据,但是有一些数据的 CONFIRM_ORDER 字段是一样的,我现在想 ①把CONFIRM_ORDER 样的数据查询放到一个字段里面(这样子查询就可以根据 CONFIRM_ORDER 字段来分页了)。再者 ②有一个模糊查询,查询到某一调数据后,还要把跟这条数据有相同 CONFIRM_ORDER 的数据也查出来,比如我模糊查询到了第 1 条数据,由于第 1 条数据和第2 调数据的CONFIRM_ORDER 值一样,我也要把第 2 条 数据查询出来。
怕什么真理无穷,进一步有近一步的欢喜本文分享一篇在工作遇到的一个问题,关于MySQL GROUP_CONCAT函数导致的问题。希望能帮忙到你。开头聊几句一年又一年,2020这一年眼看就要...