首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使查询速度更快

如何使查询速度更快
EN

Stack Overflow用户
提问于 2012-06-08 14:51:27
回答 4查看 97关注 0票数 0
代码语言:javascript
复制
SELECT D.A1, D.A2, D.A3  from D, l1
     ,l2 where
     l1.Z = "90001"and substring(D.A1,1,5) = substring(l2.A1,1,5) and substring(D.A2,1,5) = substring(l2.A2,1,5)
    AND 3959 * (PI()/180) * SQRT(
        POW( (l2.A2-l1.A2)*COS((PI()/180)*(l2.A1+l2.A1)/2), 2 ) + 
         POW( l2.A1-l1.A1, 2 ) ) <= 10');

这需要永远的时间来运行。我不确定如何让它更快。

EN

回答 4

Stack Overflow用户

发布于 2012-06-08 14:53:25

你有什么索引?你有l1.Z的索引吗?如果不是,这将是一个显而易见的开始方式。

您还可以将substring(l2.A1,1,5)等表达式的结果存储在表本身中。这将允许您索引表达式的结果,这意味着您的连接将更快。

看起来你也在尝试寻找在太空中“附近”的东西。如果是这样的话,可以看看MySQL spatial extensions

票数 0
EN

Stack Overflow用户

发布于 2012-06-08 14:56:13

您的数据库的设计在我看来很奇怪,我非常确定MySQL不能对这些条件使用索引

代码语言:javascript
复制
substring(D.A1,1,5) = substring(l2.A1,1,5) and substring(D.A2,1,5) = substring(l2.A2,1,5)

今后的糟糕性能:/

票数 0
EN

Stack Overflow用户

发布于 2012-06-08 15:04:52

您应该从使用joins重写查询开始,看看这是否有帮助:

代码语言:javascript
复制
select D.A1, D.A2, D.A3
from D
inner join l2 on substring(D.A1,1,5) = substring(l2.A1,1,5) and substring(D.A2,1,5) = substring(l2.A2,1,5)
inner join l1 on 3959 * (PI()/180) * SQRT( POW( (l2.A2-l1.A2)*COS((PI()/180)*(l2.A1+l2.A1)/2), 2 ) + POW( l2.A1-l1.A1, 2 ) ) <= 10
where l1.Z = "90001"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10944269

复制
相关文章

相似问题

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