在使用ubuntu20.04发行版升级升级到mysql 8之后,当使用主键进行排序/排序时,任何返回大量json数据负载的mysql json数据类型查询都会失败。我得到的javasql异常链是从一个排序错误的内存异常开始的。我将排序缓冲区设置为1024k,但不知道是否应该根据我读到的内容增加排序缓冲区,因为设置排序缓冲区过大可能会导致性能问题。我正在使用主键对数据进行小排序,但仍然会导致排序缓冲区错误。我可以删除sort by date子句,它也可以工作,但这不是我想要的数据顺序。是因为我需要在我正在创建的子查询中创建一个主键吗? java.sql.SQLException: Out of sort memory, consider increasing server sort buffer size
我尝试运行的查询如下:
SELECT
Date, Type, GeoJSON FROM (
SELECT Date, 'R' AS Type, RunGeoJSON as GeoJSON FROM Core.Fitness WHERE RunGeoJSON IS NOT NULL AND (CommonRoute = 0 OR CommonRoute IS NULL) UNION ALL
SELECT Date, 'C' AS Type, CycGeoJSON as GeoJSON FROM Core.Fitness WHERE CycGeoJSON IS NOT NULL AND (CommonRoute = 0 OR CommonRoute IS NULL) UNION ALL
SELECT Date, 'A' AS Type, AltGeoJSON as GeoJSON FROM Core.Fitness WHERE AltGeoJSON IS NOT NULL AND (CommonRoute = 0 OR CommonRoute IS NULL)) as tmp
ORDER BY Date DESC;
但是如果我只是删除order by,像这样,我不会得到sort buffer错误:
SELECT
Date, Type, GeoJSON FROM (
SELECT Date, 'R' AS Type, RunGeoJSON as GeoJSON FROM Core.Fitness WHERE RunGeoJSON IS NOT NULL AND (CommonRoute = 0 OR CommonRoute IS NULL) UNION ALL
SELECT Date, 'C' AS Type, CycGeoJSON as GeoJSON FROM Core.Fitness WHERE CycGeoJSON IS NOT NULL AND (CommonRoute = 0 OR CommonRoute IS NULL) UNION ALL
SELECT Date, 'A' AS Type, AltGeoJSON as GeoJSON FROM Core.Fitness WHERE AltGeoJSON IS NOT NULL AND (CommonRoute = 0 OR CommonRoute IS NULL)) as tmp;
同样,日期是一个主键(我是通过它来排序的):
describe Fitness;
+------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------------+------+-----+---------+-------+
| Date | date | NO | PRI | NULL | |
暂无答案!
目前还没有任何答案,快来回答吧!