MYSQL。如果我使用变量,LIKE 查询就会变得太长

问题描述 投票:0回答:3

我有一张500万字的大桌子。我需要找到以动态字符串开头的单词。但是当我将 LIKE 运算符与字符串变量一起使用时,查询变得太长。

例如,这个查询需要1.3秒:

set @pattern = 'f%';
select * from words where Word like @pattern limit 100;

下一次查询需要0.0秒:

select * from words where Word like 'f%' limit 100;

但是两个查询执行相同的工作。

请求的持续时间差异很大的原因可能是什么?如何消除这种差异?

mysql pattern-matching sql-like query-performance sqlperformance
3个回答
2
投票

结果发现变量有

utf8mb4
字符集(我数据库的默认字符集),但是 Word 列有
utf8
字符集。

所以,我需要做的就是使用

utf8
:

转换字符集
set @pattern = CONVERT('f%' USING utf8);
select * from words where Word like @pattern limit 100;

0
投票

这是一个众所周知的问题,因为我们在堆中存储一个值,然后在查询中使用它,而不是直接在查询中使用,我建议阅读下面的文档来提高你的 mysql 性能: https://geekflare.com/mysql-performance-tuning/


0
投票
  • 构建查询,而不是使用@variables。 可能使用存储过程作为使用准备和执行的方式。
  • 从 MyISAM 切换到 InnoDB。
  • 你关心哪 100 行吗? 没有
    LIMIT
    ORDER BY
    通常是不合适的。
  • 如果它确实是“单词”(不仅仅是像“f”这样的字母),请考虑
    FULLTEXT
  • SHOW VARIABLES LIKE 'char%';
    ——这可能会显示一个更简单的地方来调整
    CHARACTER SET
© www.soinside.com 2019 - 2024. All rights reserved.