MySQL-索引在临时服务器上工作,但在生产服务器上不工作

MySQL-索引在临时服务器上工作,但在生产服务器上不工作,mysql,sql,indexing,Mysql,Sql,Indexing,我正在用表中的数据进行地理计算,所以我在表中添加了索引。有两个索引,一个在名为纬度的列上,另一个在经度上 然后,我需要从生产服务器上的暂存中复制这个数据库300k记录。因此,我从staging导出了这个表,并将其导入到生产服务器上 但是当我在那里运行查询时,速度非常慢,就像没有使用索引一样。因此,我尝试删除它们并再次创建它们: CREATE INDEX index_hotels_on_latitude_and_longitude ON hotels(latitude, longitude) 该

我正在用表中的数据进行地理计算,所以我在表中添加了索引。有两个索引,一个在名为纬度的列上,另一个在经度上

然后,我需要从生产服务器上的暂存中复制这个数据库300k记录。因此,我从staging导出了这个表,并将其导入到生产服务器上

但是当我在那里运行查询时,速度非常慢,就像没有使用索引一样。因此,我尝试删除它们并再次创建它们:

CREATE INDEX index_hotels_on_latitude_and_longitude ON hotels(latitude, longitude)
该索引创建于0.80年代。但是当我再次运行一些查询时,结果再次非常缓慢,就像再次忽略索引一样

这里怎么了?我如何调试这个问题

这些数据库的数据与生产服务器上的数据相同

谢谢你们抽出时间

编辑:

问题是:

@hotels = Hotel.includes(:services).within(distance, origin: in_city).order("distance ASC")
此查询生成以下SQL:

SELECT (ACOS(least(1,COS(0.5943236044502174)*COS(-2.0637416211957023)*COS(RADIANS(hotels.latitude))*COS(RADIANS(hotels.longitude))+
 COS(0.5943236044502174)*SIN(-2.0637416211957023)*COS(RADIANS(hotels.latitude))*SIN(RADIANS(hotels.longitude))+
 SIN(0.5943236044502174)*SIN(RADIANS(hotels.latitude))))*3963.1899999999996)
 AS distance,hotels.* 
FROM `hotels` WHERE ((
 (ACOS(least(1,COS(0.5943236044502174)*COS(-2.0637416211957023)*COS(RADIANS(hotels.latitude))*COS(RADIANS(hotels.longitude))+
 COS(0.5943236044502174)*SIN(-2.0637416211957023)*COS(RADIANS(hotels.latitude))*SIN(RADIANS(hotels.longitude))+
 SIN(0.5943236044502174)*SIN(RADIANS(hotels.latitude))))*3963.1899999999996)
 <= 100.0))
ORDER BY distance ASC
很抱歉,我不知道如何使大查询更易于阅读

您说有两个索引。这表明您需要:

CREATE INDEX index_hotels_on_latitude ON hotels(latitude);
CREATE INDEX index_hotels_on_longitude ON hotels(longitude);

复合索引不同于两个索引。

请使用您正在使用的查询编辑您的问题。谢谢,我刚刚尝试创建这些索引,但仍然没有帮助。我将查询添加到OP.@user984621。您的查询看起来不会在任何一台服务器上使用索引。我怀疑性能差异是由其他原因造成的。