社区首页 >问答首页 >当向搜索字符串添加1个或2个字符时,为什么这个MySQL查询花费的时间会不成比例地长?
我得到了以下SQL查询:
SELECT * FROM table WHERE text LIKE '%15%' AND text LIKE '%10%' AND text LIKE '%202%';
表中约有40000个条目,文本内容约为60000个字符。
当我执行查询时,它是相当快的…持续时间约为0,05秒。
问题是,当我在最后一个字符串中添加两个字符时,它已经花了整整15秒:
SELECT * FROM table WHERE text LIKE '%15%' AND text LIKE '%10%' AND text LIKE '%2020i%';
请注意202和2020i之间的区别。
有趣的是,这与数字和字母的组合有关。
例如,此查询也在大约0.05秒内执行,尽管最后一个字符串中有更多字符:
SELECT * FROM table WHERE text LIKE '%15%' AND text LIKE '%10%' AND text LIKE '%information%';
使用information2而不是information ...执行时间上升到17秒。
如果这是由预定义的字符集引起的,会不会有一些问题?而像"2i“或"i2”这样的特定模式是由DB以某种方式解释的吗?只是一个想法..。所有列上的字符集为utf8,排序规则为utf8_general_ci。
谢谢你的帮助!
编辑:
这里是有问题的表格!
CREATE TABLE `table` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `text` mediumtext CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id_UNIQUE` (`id`), FULLTEXT KEY `text` (`text`) ) ENGINE=MyISAM AUTO_INCREMENT=889823 DEFAULT CHARSET=latin1
Stack Overflow用户
发布于 2021-09-02 16:45:25
全文索引是在基于文本的列(CHAR、VARCHAR或TEXT列)上创建的,以加快对这些列中包含的数据的查询和DML操作。
FULLTEXT index
ALTER TABLE your_table_name ADD FULLTEXT INDEX `FullText` ('col1', 'col2', 'col3', 'etc');
Stack Overflow用户
发布于 2021-09-03 10:31:55
我提出的问题的答案似乎与特定text列的排序规则设置有关。在比较字符串时,排序规则utf8似乎有很大的性能影响。数据库的默认排序规则是latin1,我不确定出现性能影响是因为数据库在内部将非默认字符集的列中的任何数据转换为默认字符集(latin1),还是因为在执行字符串匹配时表示本身并不是最优的,然而,我猜在使用utf8排序规则时,一些字符模式花费的时间要长得多。我将text列的排序规则更改为latin1,查询再次运行得非常快。这可能不是我的问题的实际答案,而是我的查询速度太慢的问题的解决方案。
页面原文内容由
Stack Overflow
提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:
https://stackoverflow.com/questions/69032858
复制
相关知识
搜索
Wireshark搜索/查找字符串失败
花朵上的大青虫
项目中走马观花式学习PHP
使用Python调用mysql
脑与数学(2)
bjhuadudu.com的综合查询
www.baihuamen.com的综合查询
SKYNE/python
数据库基础操作
网址: 当向搜索字符串添加1个或2个字符时,为什么这个MySQL查询花费的时间会不成比例地长? https://m.huajiangbk.com/newsview104402.html
上一篇: 解决SQL错误(208):对象名 |
下一篇: 逻辑删除与联合索引冲突处理(二) |