首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql like中文慢

基础概念

MySQL中的LIKE操作符用于在WHERE子句中进行模糊匹配。当使用LIKE操作符匹配中文字符时,可能会遇到性能问题,因为MySQL需要对每个字符进行逐个比较。

相关优势

  • 灵活性LIKE操作符提供了灵活的模糊匹配功能,可以匹配任意模式的字符串。
  • 简单易用:语法简单,易于理解和使用。

类型

  • 前缀匹配LIKE 'abc%'
  • 后缀匹配LIKE '%abc'
  • 任意位置匹配LIKE '%abc%'

应用场景

  • 搜索功能:在用户输入关键词时,进行模糊匹配以找到相关记录。
  • 数据过滤:根据特定模式过滤数据。

问题及原因

为什么MySQL LIKE中文慢?

  1. 字符集和排序规则:如果表中的字符集和排序规则不支持中文,MySQL需要进行额外的转换和处理,导致性能下降。
  2. 索引问题LIKE操作符通常无法有效利用索引,特别是在前缀匹配时。
  3. 数据量:当表中的数据量很大时,模糊匹配的性能会显著下降。

解决方法

1. 使用正确的字符集和排序规则

确保表和列使用支持中文的字符集和排序规则,例如utf8mb4

代码语言:txt
复制
CREATE TABLE example (
    id INT PRIMARY KEY,
    name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
);

2. 使用全文索引

对于全文搜索,可以考虑使用MySQL的全文索引功能。

代码语言:txt
复制
ALTER TABLE example ADD FULLTEXT(name);
SELECT * FROM example WHERE MATCH(name) AGAINST('中文');

3. 使用前缀索引

如果必须使用LIKE操作符,可以考虑使用前缀索引来提高性能。

代码语言:txt
复制
CREATE INDEX idx_name_prefix ON example(name(10));

4. 分页查询

对于大量数据的模糊匹配,可以考虑分页查询,避免一次性加载过多数据。

代码语言:txt
复制
SELECT * FROM example WHERE name LIKE '%中文%' LIMIT 10 OFFSET 0;

5. 使用外部搜索引擎

对于复杂的搜索需求,可以考虑使用外部搜索引擎,如Elasticsearch。

参考链接

通过以上方法,可以有效解决MySQL LIKE中文慢的问题,提高查询性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

like模糊匹配查询慢解决之道——MySQL全文索引

* from t_chinese_phrase where instr(phrase,'昌') > 0; select * from t_chinese_phrase where phrase like...但是使用部分单词去查询或者使用部分中文去查询时,是查询不出来数据的,像中文需要使用中文分词器进行分词。...中文分词与全文索引 InnoDB默认的全文索引parser非常合适于Latin,因为Latin是通过空格来分词的。但对于像中文,日文和韩文来说,没有这样的分隔符。...查一下目前的值 show variables like '%token%'; 参数解析: innodb_ft_min_token_size 默认3,表示最小3个字符作为一个关键词,增大该值可减少全文索引的大小...之前的版本不支持中文,需使用第三方插件 6、全文索引只能在 InnoDB(MySQL 5.6以后) 或 MyISAM 的表上使用,并且只能用于创建 char,varchar,text 类型的列。

50610
  • Mysql慢查询_mysql并发查询慢

    慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中...log-slow-queries :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。...配置 默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的,可以通过设置slow_query_log的值来开启,如下所示 mysql> show variables like ‘...开启了慢查询日志只对当前数据库生效,如果MySQL重启后则会失效。...你用show variables like ‘long_query_time’查看是当前会话的变量值,你也可以不用重新连接会话,而是用show global variables like ‘long_query_time

    17.7K20

    mysql慢日志查询_mysql开启慢查询日志

    通过命令查看慢查询最长时间,一般默认10s SHOW VARIABLES LIKE 'long_query_time 我们可以修改该时间,比如我在这里设置为1s,方便测试。...slow_query_log=ON; 然后执行一条sql语句,执行时间大于你所设置的long_query_time,我执行了一条sql语句执行时间为1.468s 打开Mysql安装位置, 找到my.ini...查看一下 这里就找到了慢查询日志了。。。...如果你不写 [session|global] 默认是session 会话,指取出当前窗口的执行,如果你想看所有(从mysql 启动到现在,则应该 global) show status like ‘connections...’; //显示慢查询次数 show status like ‘slow_queries’; 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    7K10

    mysql慢查询sql统计_mysql服务启动慢

    一、概述 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值(long_query_time,单位:秒)的SQL语句。...默认情况下,MySQL不启动慢查询日志。本文简单介绍如何开启慢查询日志,如何用mysqldumpslow分析慢查询。...2、查询慢查询日志的开启状态和慢查询日志储存的位置 show variables like ‘%quer%’; 参数说明: slow_query_log : 是否已经开启慢查询 slow_query_log_file...性能优化时开启此项,平时不要开启) 3、查看存放日志的形式 show variables like ‘log_output’; 4、永久开启慢日志 修改my.cnf 在配置文件my.cnf(一般为/etc.../slow-query.log 按照时间排序且含有’like’的top 5个SQL语句 $ mysqldumpslow -s t -t 3 -g “like” /var/lib/mysql/slow-query.log

    3.3K20

    Mysql 慢日志

    my.cnf 是windows环境下的配置文件,my.ini是linux下的配置文件 没有此ini(配置)文件,Mysql能正常跑么?...查看慢日志是否开启 show variables like 'slow_query%'; image.png image.png 开启慢日志 set global slow_query_log='ON'...; image.png 查看当前有多少条慢日志 show global status like '%slow_queries%'; image.png 制造一条慢SQL select sleep(10...); 查看慢日志记录时间 // 查看当前会话的,如果修改成功,也不会看到改变,(等个几秒,重开一个窗口,执行命令,才能看见) show variables like 'long_query_time';...慢日志有2种存储形式 一个默认的是File,一个是Table 查看慢日志的类型 show variables like '%log_output%'; image.png 设置慢日志的类型 设置为:FILE

    3.5K20

    Mysql资料 慢查询

    一.简介 MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。...默认情况下,MySQL数据库并不启动慢查询日志,需要手动来设置这个参数。当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。...二.查询 slow_query_log 慢查询开启状态 slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录) long_query_time...查询超过多少秒才记录 查看是否开启和存放位置,当前为关闭状态 show variables like 'slow_query%'; 多少米才记录,当前10秒 show variables like...放一个慢查询语句 mysql> select sleep(2); 查看日志是否生成并有那个语句 cat /usr/local/mysql/data/slow.log

    2K00
    领券