SELECT property.paon, property.saon, property.street, property.postcode, property.lastSalePrice, property.lastTransferDate,
epc.ADDRESS1, epc.POSTCODE, epc.TOTAL_FLOOR_AREA,
(
3959 * acos (
cos (radians(54.6921))
* cos(radians(property.latitude))
* cos(radians(property.longitude) - radians(-1.2175))
+ sin(radians(54.6921))
* sin(radians(property.latitude))
)
) AS distance
FROM property
RIGHT JOIN epc ON property.postcode = epc.POSTCODE AND CONCAT(property.paon, ', ', property.street) = epc.ADDRESS1
WHERE property.paon IS NOT NULL AND epc.TOTAL_FLOOR_AREA > 0
GROUP BY CONCAT(property.paon, ', ', property.street)
HAVING distance < 1.4
ORDER BY property.lastTransferDate DESC
LIMIT 10
表属性有2200万行,表epc有1400万行
没有GROUP BY和ORDER BY,它会快速运行。
属性表通常具有多次相同的属性,但我需要选择具有最新lastTransferDate的属性。
如果有更好的方法,我愿意接受它
以下是查询说明: Query-Explain-Image
答案 0 :(得分:1)
你可以做一些事情:
CONCAT(property.paon, ', ', property.street)
和GROUP BY
中使用CONCAT JOIN
(这会加快它的速度!)HAVING
删除epc.TOTAL_FLOOR_AREA > 0
并将其添加到WHERE
如果您需要更多帮助,请与我们分享您的查询。
答案 1 :(得分:0)
你控制数据库吗?如果这样做,您可以尝试在地址和邮政编码列上添加索引(join子句中的任何内容)。这应该可以加快查询速度。
编辑:重读您的问题。
如果GROUP BY和ORDER BY子句正在减慢速度,我会尝试在这些子句中引用的列上添加索引。