美文网首页技术分享
MySQL利用help_topic表把以特殊字符分隔的字符串转换

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

作者: 养一只tom猫 | 来源:发表于2021-04-23 10:41 被阅读0次

    最近发现项目中首页某个查询很慢,点进代码一看原来是当时用到了很多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 );
    

    相关文章

      网友评论

        本文标题:MySQL利用help_topic表把以特殊字符分隔的字符串转换

        本文链接:https://www.haomeiwen.com/subject/dchcrltx.html