技术分享

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

2021-04-23  本文已影响0人  养一只tom猫

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

猜你喜欢

热点阅读