Mysql 使用索引优化sql查询

Mysql 使用索引优化sql查询,mysql,sql,postgresql,mysqli,Mysql,Sql,Postgresql,Mysqli,我有两张桌子,一张是会议桌,一张是在线桌 | id | time | | 1 | 1413170771 | | 2 | 1413174398 | | 7 | 1413174567 | 在线是 | id | username | city | lat | lon | | 1 | Jon | Toronto | 45.46427

我有两张桌子,一张是会议桌,一张是在线桌

 |   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 
SELECT*,(6371*acos(弧度(45.4642700))*cos(弧度(纬度))*cos(弧度(经度)-弧度(9.1895100))+sin(弧度(45.4642700))*sin(弧度(纬度)))作为距离
从在线作为o
o.id=s.id上作为s的内部联接会话

距离假设您有以下表格

 |   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;
选择*
来自会话s,在线o
其中s.dist<2000
s.id=o.id
按用户名DESC订购;

为什么要
优化此查询
?因为此查询被广泛使用,并且表中包含10.000行如果postgresql和mysql都有可能用于将来的迁移,如果不可能,我更喜欢mysql一个可能的优化是将
距离直接插入表中,这样你就不必每次都重新校准了!我不能加距离,因为它总是不同的。在这种情况下,我必须计算马丁和丹尼和乔恩的距离