gpt4 book ai didi

MySQL - 索引在登台服务器上工作,但在生产服务器上不起作用

转载 作者:行者123 更新时间:2023-11-29 23:19:15 26 4
gpt4 key购买 nike

我正在使用表中的数据进行一些地理计算,因此我添加了索引。有 2 个索引,一个位于名为 latitude 的列上,下一个位于 longitude 上。

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

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

CREATE INDEX index_hotels_on_latitude_and_longitude ON hotels(latitude, longitude)

索引在0.80s内创建。但是当我再次运行一些查询时,结果再次非常慢,就像索引再次被忽略一样。

这里出了什么问题?我该如何调试这个问题?

数据库是相同的(生产中的数据与登台服务器上的数据相同)。

感谢大家抽出时间。

编辑:

这是查询:

@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);

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

关于MySQL - 索引在登台服务器上工作,但在生产服务器上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27470385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com