首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Like / match against的慢速mysql查询

使用Like / match against的慢速mysql查询
EN

Stack Overflow用户
提问于 2012-06-19 06:33:55
回答 2查看 297关注 0票数 1

我需要搜索比实际拨号码大的最接近的拨号码。例如,最接近的33将是331或332 (如果331不存在)...所以必须是33xxxx,34是无效的。

这两个查询可以工作,但速度太慢(250ms/行):

代码语言:javascript
复制
SELECT Dialcode
FROM table
WHERE (Dialcode LIKE '$var%' AND Dialcode > '$var' AND Price IS NOT NULL)
ORDER BY Dialcode ASC LIMIT 1

SELECT Dialcode
FROM table
WHERE (MATCH(Dialcode) AGAINST ('$var*' IN BOOLEAN MODE) AND Dialcode > '$var'
      AND Price IS NOT NULL)
ORDER BY Dialcode ASC LIMIT 1

我的拨号码是主键BIGINT(15)。

我这样做,它真的很快(>1毫秒/行),但它并不完全是我需要的:

代码语言:javascript
复制
SELECT Dialcode
FROM table
WHERE (Dialcode >= '$var' AND Price IS NOT NULL)
ORDER BY Dialcode ASC LIMIT 1

所以我想我的问题是喜欢/匹配。

任何想法都将不胜感激。

更新解决方案:

改编自raina77ow建议的解决方案:

代码语言:javascript
复制
SELECT Dialcode FROM table WHERE (( (Dialcode BETWEEN $var * 1 AND ’9’ )
   OR (Dialcode BETWEEN $var * 10 AND $var.’99’ )   
   OR (Dialcode BETWEEN $var * 100 AND $var.’999’ )
OR (Dialcode BETWEEN $var * 1000 AND $var.’9999’ )
…
) AND Price IS NOT NULL) ORDER BY Dialcode ASC LIMIT 1

谢谢你们!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-19 06:45:15

我看到这里的主要问题是索引是基于Dialcode的数值构建的,而不是字符串的数值。所以这两个查询根本不使用索引。

你可以尝试构建一个数值型函数,问题是这个函数在计算的左边有Dialcode --所以索引不会再被使用。

也许这种方法可能更有用。

代码语言:javascript
复制
SELECT Dialcode 
FROM table 
WHERE ( (Dialcode BETWEEN %value% * 10 AND (%value%*10 + 9) 
   OR (Dialcode BETWEEN %value% * 100 AND (%value%*100 + 99) 
   OR (Dialcode BETWEEN %value% * 1000 AND (%value%*1000 + 999)
   ...
) AND Price IS NOT NULL
ORDER BY Dialcode LIMIT 1;

它丑陋得要死(我甚至在前两次都写错了--这应该归功于我的改正),是的,但它应该被列入索引。另一种方法是使用UNION (and not OR),但我认为这两个查询将以相同的方式执行(尽管没有进行验证)。

票数 2
EN

Stack Overflow用户

发布于 2012-06-19 07:00:33

尝试使用正则表达式,如下所示:

代码语言:javascript
复制
SELECT Dialcode
FROM table
WHERE Dialcode REGEXP '^[$var]'
ORDER BY Dialcode ASC LIMIT 1

我现在不能测试它,但我相信它应该可以工作。

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

https://stackoverflow.com/questions/11092056

复制
相关文章

相似问题

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