sql—升级到MySQL8后,json大型查询失败

u1ehiz5o  于 2021-08-13  发布在  Java
关注(0)|答案(0)|浏览(322)

在使用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    |       |

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题