[英]optimize sql query with index
我有兩個表會話和在線
| id | time |
| 1 | 1413170771 |
| 2 | 1413174398 |
| 7 | 1413174567 |
在線是
| id | username | city | lat | lon |
| 1 | Jon | Toronto | 45.4642700 | 9.1895100 |
| 2 | Danny | Ottawa | 46.5645600 | 9.3456883 |
| 7 | Martin | Calgary | 46.6775339 | 9.5469944 |
查詢
SELECT * , ( 6371 * acos( cos( radians( 45.4642700 ) ) * cos( radians( lat ) ) * cos( radians( lon ) - radians( 9.1895100 ) ) + sin( radians( 45.4642700 ) ) * sin( radians( lat ) ) ) ) AS distance
FROM online AS o
INNER JOIN sessions AS s ON o.id = s.id
HAVING distance <2000
ORDER BY username DESC
如何優化此查詢? 我在會話ID和在線ID上都有索引,我可以為臨時表添加索引嗎?
假設您有以下表格
| id | time |
| 1 | 1413170771 |
| 2 | 1413174398 |
| 7 | 1413174567 |
在線更改為
| id | username | city | lat | lon | dist |
| 1 | Jon | Toronto | 45.4642700 | 9.1895100 | ........ |
| 2 | Danny | Ottawa | 46.5645600 | 9.3456883 | ........ |
| 7 | Martin | Calgary | 46.6775339 | 9.5469944 | ........ |
以下查詢如何處理:
SELECT *
FROM session s, online o
WHERE s.dist < 2000
AND s.id = o.id
ORDER BY username DESC;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.