MySQL利用help_topic表把以特殊字符分隔的字符串转换成行

最近发现项目中首页某个查询很慢,点进代码一看原来是当时用到了很多FIND_IN_SET函数查询(因为表中字段是使用逗号分隔的字符串),FIND_IN_SET函数是不走索引的,那么对于FIND_IN_SET函数我们该如何优化呢?查阅了很多博客发现下面这种方法:MySQL为我们提供了一个help_topic表,该表中索引是从0自增的一共600多行,可使用该表把使用特定字符分隔的字符串替换成一列一列的数据,可将FIND_IN_SET函数替换成IN查询

SELECT
    #截取字符串 比如当前字符串为 '1,2,3,4' 会将字符串截取为 
    #0 1
    #1 2
    #2 3
    #3 4
    #help_topic表中剩余的列全将为字符串最后一位
        help_topic_id,
    substring_index( substring_index( '1,2,3,4', ',', help_topic_id + 1 ), ',',- 1 ) 
FROM
    mysql.help_topic 
WHERE
    #控制行数 (字符串整个长度 - 去掉分隔符的长度)+ 1 = 当前字符串中所有被截取有效数据
    help_topic_id < ( length( '1,2,3,4' ) - length( REPLACE ( '1,2,3,4', ',', '' ))+ 1 );
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容