首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL使用OR与匹配以大大降低查询速度

MySQL使用OR与匹配以大大降低查询速度
EN

Stack Overflow用户
提问于 2015-02-12 21:29:19
回答 1查看 537关注 0票数 1

列被编入索引和全文。为什么“或”增加5-8秒?

代码语言:javascript
运行
复制
SELECT * FROM exampleTable WHERE MATCH(someColumn) AGAINST('+testing123*' IN BOOLEAN MODE) 
// returns in .05 seconds
SELECT * FROM exampleTable WHERE someColumn LIKE 'testing123%' 
// returns in .003 seconds
SELECT * FROM exampleTable WHERE (MATCH(someColumn) AGAINST('+testing123*' IN BOOLEAN MODE) OR MATCH(someColumn) AGAINST('+testing123*' IN BOOLEAN MODE)) 
// returns in 5-8 seconds; yes, they are same MATCH statement...
SELECT * FROM exampleTable WHERE (MATCH(someColumn) AGAINST('+testing123*' IN BOOLEAN MODE)OR someOtherIndexedColumn LIKE 'testing123%' 
// returns in 5-8 seconds; ***** different columns this time*******

我觉得奇怪的是,当MySQL是同样的语句时,它是如此缓慢。这就像导致语句"SELECT * FROM tableName 1 OR 1 "为5秒一样。无论列是相同还是不同,在速度上都没有区别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-12 21:43:04

尽管MySQL 5.0+现在支持索引合并,但目前存在这样的限制:

索引合并不适用于全文索引.我们计划在未来的MySQL发行版中将其扩展到包括这些内容。

通常,您可以将这些重写为UNION查询:

代码语言:javascript
运行
复制
SELECT * FROM exampleTable
WHERE MATCH(someColumn) AGAINST('+testing123*' IN BOOLEAN MODE)
UNION
SELECT * FROM exampleTable
WHERE MATCH(someColumn) AGAINST('+testing123*' IN BOOLEAN MODE)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28488123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档