首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索比类似‘%omething.%’更快的查询

搜索比类似‘%omething.%’更快的查询
EN

Stack Overflow用户
提问于 2014-02-21 17:11:44
回答 3查看 168关注 0票数 2

我有一个很大的域名列表,还有一个很大的单词列表。我想看看在我的列表中有多少域名的末尾有这些单词。我尝试了2个查询,但都花费了太多的时间来执行。尝试找出是否有任何方法可以使查询速度更快。

首先我尝试了这个查询,大约需要50分钟才能返回结果:

代码语言:javascript
复制
SELECT COUNT(*) AS count 
FROM   table 
WHERE  domain_name LIKE '%my_word.%'; 

然后我想如果我去掉它的.%,也许它会更快,所以我试了一下,但它仍然很慢:

代码语言:javascript
复制
SELECT COUNT(*) AS count 
FROM   table 
WHERE  SUBSTRING_INDEX(domain_name, '.', 1) LIKE '%my_word'; 

有没有人知道更快的查询方法?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2014-02-21 17:18:41

为了获得最佳结果,您需要在数据上创建全文索引,请使用innoDb mysql引擎

例如

代码语言:javascript
复制
SELECT  *
FROM    domain_name
WHERE   MATCH(data) AGAINST ('+word1 +word2 +word3' IN BOOLEAN MODE)

参考http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html

票数 0
EN

Stack Overflow用户

发布于 2014-02-21 17:33:30

你的问题可以通过全文索引来解决,但是它只在innodb的5.6版本中兼容,并且你可以在myisam表的任何版本中使用。

通过以下命令创建全文索引-

代码语言:javascript
复制
ALTER TABLE my_table ADD FULLTEXT(domain_name);

现在你可以按照下面的方法使用查询-

代码语言:javascript
复制
SELECT count(*) FROM my_table WHERE MATCH (domain_name) AGAINST ('your_word');
票数 0
EN

Stack Overflow用户

发布于 2014-02-21 19:00:50

由于您的查询不是寻找单独的单词,我认为它不会从全文索引中受益(引擎不知道如何将域解析为单独的单词)。我也不相信substring解决方案会产生比LIKE运算符更好的性能。您正在处理简单的字符串匹配,数据库不是运行它的最佳位置。

也就是说,我认为提高这个查询速度的最好方法是减少需要从磁盘读取的字节数。您可以通过在该列上创建一个简单的索引来实现这一点(查询仍然是索引扫描,但它比表扫描更便宜)。您可以做的另一件事是从该列中删除不必要的字符,如.com.net,因为这将允许在每次访问磁盘时获取更有意义的数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21929922

复制
相关文章

相似问题

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