MySQL左连接需要太长的时间才能返回
问题描述:
我有一个问题,例如我有三个表tbldispensaries
,tblStates
,tblCountries
。我将国家和州ID存储在药房表中,所有与国家和州相关的细节分别在tblCountries
和tblStates
。MySQL左连接需要太长的时间才能返回
我正在写一个查询,以查找500范围内的附近药房,以便在Google地图上显示标记,查询很好,但是当我使用与查询左连接时,它花费的时间太多回复。我尝试过使用索引,但是它对它也没有影响。所以请建议我解决这个问题。这里下面是我正在使用的查询: -
SELECT
d.id AS disp,
d.id AS the_id,
d. NAME,
d.address AS addr,
d.city AS city_name,
c.country_name AS cntry_name,
s.state_name AS st_name,
d.zip AS zipcode,
d.latitude,
d.longitude,
(
6371 * ACOS(
COS(RADIANS(33.6119)) * COS(RADIANS(latitude)) * COS(
RADIANS(longitude) - RADIANS(- 111.8906)
) + SIN(RADIANS(33.6119)) * SIN(RADIANS(latitude))
)
) AS distance
FROM
`tblDispensaries` d
LEFT JOIN tblCountries c ON (c.country_id = d.country)
LEFT JOIN tblStates s ON (s.state_id = d.state)
WHERE
d.id IS NOT NULL
AND d. STATUS = 1
HAVING distance < 500
LIMIT 0,60
答
这可能不是一个答案,但它是一个评论两大。另外,我没有数据,所以我无法测试,但在这里。
SELECT
Dispensaries.*,
c.country_name AS cntry_name,
s.state_name AS st_name
FROM (
SELECT
d.id AS disp,
d.id AS the_id,
d. NAME,
d.address AS addr,
d.city AS city_name,
d.zip AS zipcode,
d.latitude,
d.longitude,
(
6371 * ACOS(
COS(RADIANS(33.6119)) * COS(RADIANS(latitude)) * COS(
RADIANS(longitude) - RADIANS(- 111.8906)
) + SIN(RADIANS(33.6119)) * SIN(RADIANS(latitude))
)
) AS distance
FROM
`tblDispensaries` d
WHERE
d.id IS NOT NULL
AND d. STATUS = 1
HAVING distance < 500
LIMIT 0,60
) as Dispensaries
LEFT JOIN tblCountries c ON (c.country_id = Dispensaries.country)
LEFT JOIN tblStates s ON (s.state_id = Dispensaries.state)
我想提取结果和使用JOIN
会更快。
在表 – Priyanshu
的ID列上创建索引我已经在国家和州的tbldispersaries中创建了两个索引。 –
请分享与我们一起查询的解释以及基础表的create table statemenst,以便我们可以确切地看到您在3个表上的索引。但是,having子句中的过滤可能是查询速度慢的原因之一。您是否考虑过使用计算列(如果您的mysql版本支持它们)并将条件从where条件移入? – Shadow