0
我在我的数据库中有这个查询,它基本上是从坐标半径10英里内拉出来的。SQL优化
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
当我资料这个查询,我得到这个: 连接大小:3956(BAD) 使用临时(BAD) USINGI文件排序(BAD)
你们能不能帮我优化这个查询?
在此先感谢
我总是使用IN()来检查条件的子集。这是一个不好的练习吗?例如,如果我想计算成员对他最喜欢的东西,我会这样做:SELECT * FROM table WHERE member_id IN(1,2,3,4,5,6,7,8,... 2000) – gumpi 2010-11-04 14:50:38
用一粒盐来表达我的看法。这在很大程度上取决于特定DMBS的功能。如果查询优化器很聪明,它可以轻松地将IN语句展开到相应的“field ='值'OR ...”语句中。但是我看到DBMS在这方面失败了;并且函数会在每个记录上向覆盖层报告之前运行,这使查询变慢。 – 0xCAFEBABE 2010-11-04 15:10:41