【发布时间】:2015-03-21 18:37:42
【问题描述】:
优化此查询的最佳方法是什么?
$tripsNearLocation = mysqli_query($con,
"SELECT * FROM (
SELECT *
, ( 3959 * acos( cos(" . $latRad . ")
* cos( radians( startingLatitude ) )
* cos( radians( startingLongitude )
- (" . $longRad . ") )
+ sin(" . $latRad . ")
* sin( radians( startingLatitude ) ) ) )
AS distance FROM trips
) as query
WHERE distance < 10
ORDER BY distance LIMIT 0 , 10;");
如果有 50,000 行,则需要一两秒才能完成。我是否应该添加一个不同的查询来消除甚至不在输入坐标的“近距离”范围内的所有行,然后计算剩余的行?假设输入的纬度坐标是 67,则排除纬度坐标不是 65-69 的所有行。
或者添加一个“状态列”,如果它们不在同一状态,它会从计算中删除所有行?
还是只处理 2 秒的计算?我担心数据库可能包含超过 100,000 行,并且执行起来需要很长时间。
【问题讨论】:
标签: mysql performance optimization query-optimization