首页
学习
活动
专区
圈层
工具
发布

SQL优化
EN

Stack Overflow用户
提问于 2010-11-04 22:31:04
回答 1查看 73关注 0票数 0

我在我的数据库上有这个查询,它基本上是拉出距离坐标10英里半径内的那些。

代码语言:javascript
复制
SELECT id 
  FROM business 
 WHERE  ( coordinates!='' 
   AND getDistance('-2.1032155,49.1801863', coordinates)<10 ) 
   AND id NOT IN ('6', '4118') ORDER BY rand() LIMIT 0,5

当我分析这个查询时,我得到这个: JOIN SIZE: 3956 (BAD) USINGI FILESORT (BAD) USINGI FILESORT (BAD)

你们能帮我优化这个查询吗?

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-04 22:41:55

您将始终需要FILESORT (对临时内存中的结果数据进行排序),因为您需要“排序依据”未索引的内容(rand())。

根据DBMS的优化能力,最好使用"AND id != '6‘AND id != '4118'“而不是"NOT IN”子句。

您应该始终在查询中首先声明固定信息,尽管这也取决于查询优化器的功能。此外,标准应该与索引对齐,这意味着标准的出现顺序应该与您希望DMBS使用的索引中的顺序相同。通常有一个选项来声明使用哪个索引(关键字是"Index hint"),但大多数DMBS最清楚在大多数情况下使用哪个索引(从查询本身猜测)。

而且,当您使用查询运行时生成的条件(您的函数)时,您将永远不会使用临时。

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

https://stackoverflow.com/questions/4097668

复制
相关文章

相似问题

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