MySQL筛选结果导出数据减少怎么解决

我的表格有2000万左右的数据,用navicat经过筛选得到约12万的数据,我需要把这个数据保存下来成为一个表格,我没找到方法直接保存,只好先导出这个结果,但是在导出之后的表格里面我看到只有5万多条数据了,导出过程并没有保错,怎么回事呢?我的想法是把这个结果做成一张表,再和其他表进行联合查询。

当导出数据量较大的情况下,excel支持最多65535行数据左右。

参考:

/**
 * @version 1.0.0
 * @className: BigExcelFileInit
 * @description: excel大数据量导出工具类
 * @author: LiJunYi
 * @create: 2022/7/6 8:45
 */
public class BigExcelFileInit
{
    /**
     * xlsx excel 每个 sheet 写入的数据
     */
    private static final int NUM_PER_SHEET = 300000;

    /**
     * xlsx excel 每次向 sheet 中写入的数据(分页写入)
     */
    private static final int NUM_BY_TIMES = 50000;

    /**
     * excel通用大数据量分sheet分次写入
     *
     * @param passWord    密码
     * @param fileName    文件名字
     * @param data        数据
     * @param filePath    文件路径
     * @param elementType 元素类型
     * @throws Exception 异常
     */
    public static void bigExcelFileInit(List<?> data, String passWord, String fileName, String filePath, Class<?> elementType) throws Exception
    {
        // 获取 sheet 的个数
        int sheetNum = data.size() % NUM_PER_SHEET == 0 ? data.size() / NUM_PER_SHEET : data.size() / NUM_PER_SHEET + 1;
        // 获取每个sheet 写入的次数
        int writeNumPerSheet = NUM_PER_SHEET / NUM_BY_TIMES;
        // 最后一个 sheet 写入的数量
        int writeNumLastSheet = data.size() - (sheetNum - 1) * NUM_PER_SHEET;
        // 最后一个 sheet 写入的次数
        int writeNumPerLastSheet = writeNumLastSheet % NUM_BY_TIMES == 0 ? writeNumLastSheet / NUM_BY_TIMES : writeNumLastSheet / NUM_BY_TIMES + 1;
        // 指定写入的文件
        try(ExcelWriter excelWriter = EasyExcel.write(filePath, elementType).build())
        {
            for (int i = 0; i < sheetNum; i++)
            {
                String sheetName = "sheet" + i;
                WriteSheet writeSheet = EasyExcel.writerSheet(i, sheetName).build();
                // 每个sheet 写入的次数
                int writeNum = i == sheetNum - 1 ? writeNumPerLastSheet : writeNumPerSheet;
                // 每个sheet 最后一次写入的最后行数
                int endEndNum = i == sheetNum - 1 ? data.size() : (i + 1) * NUM_PER_SHEET;
                for (int j = 0; j < writeNum; j++)
                {
                    int startNum = i * NUM_PER_SHEET + j * NUM_BY_TIMES;
                    int endNum = j == writeNum - 1 ? endEndNum : i * NUM_PER_SHEET + (j + 1) * NUM_BY_TIMES;
                    excelWriter.write(data.subList(startNum, endNum), writeSheet);
                }
            }
        }
        if (StrUtil.isNotEmpty(passWord))
        {
            // 设置excel打开密码
            FileReadonlyProtectionUtil.enforceEncryptProtectionExcel(filePath, passWord);
        }
    }
}



用这个导出Excel,Excel的上限是100万左右

img

也可用CSV,导出,这个导出比较快,但是需要调整

img