我正在尝试优化下面的mysql查询:
SET lc_time_names = 'fr_FR';
SET @j = '{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[1.31321,48.024146],[1.63456,48.024146],[1.63456,48.150283],[1.31321,48.150283],[1.31321,48.024146]]]}}';
SET @zone = ST_GeomFromGeoJson(@j);
create temporary table A as select id, field1, field2, ... from mybase WHERE val > 0 and ST_CONTAINS(@zone, pt) and year(date_date) IN ('2022','2021','2020') order by date_date DESC limit 200;
select * from A WHERE 1;
...
当前创建临时表需要15秒,但当我删除order by date_date DESC时,时间减少到0.1秒!
当前索引:“pt”字段上的空间和“date_date”字段上的索引
EXPLAIN显示保留“order by”语句时只使用了日期索引而没有使用空间索引。如果删除“order by date_date”,它将使用空间索引。
该表有800万行。
你知道如何优化订单吗?
谢谢你的帮助!
1条答案
按热度按时间disho6za1#
SPATIAL
索引。您确实有这样的??问题是在
WHERE
中有3个子句,每个子句都可以使用索引,但不能有两个子句使用相同的索引。如果在
date_date
上使用索引是有益的,则将至
且具备了
我不能更确定,因为这取决于数据的分布和月相。