MySQL文件速度非常慢

MySQL文件速度非常慢,mysql,into-outfile,Mysql,Into Outfile,这是我的第一篇帖子,我真的需要帮助。。。。。。我得到了这个escenario 从dbf文件导出数据 将dbf文件数据保存到普通文件中,所有值由, 然后我净化数据,只取我需要的字段 将这些字段命名并在mysql上创建表 将数据导入mysql加载数据填充 处理数据并获得计算值 使用这些值生成csv 所以。。。。在第6步之前都是好的,但是当我尝试导出查询时,一切都出错了,数据永远不会输出。。。。大约连续两天,什么也没发生。。。。仍在处理但没有输出 以下是查询: SELECT (DATE_FORMAT(

这是我的第一篇帖子,我真的需要帮助。。。。。。我得到了这个escenario

从dbf文件导出数据 将dbf文件数据保存到普通文件中,所有值由, 然后我净化数据,只取我需要的字段 将这些字段命名并在mysql上创建表 将数据导入mysql加载数据填充 处理数据并获得计算值 使用这些值生成csv 所以。。。。在第6步之前都是好的,但是当我尝试导出查询时,一切都出错了,数据永远不会输出。。。。大约连续两天,什么也没发生。。。。仍在处理但没有输出

以下是查询:

SELECT (DATE_FORMAT(NOW(), '%Y%m%d')),'0001391343',
IFNULL(LPAD(UPPER(TCPCB.CODICLIE), 10, '0'), "          "),'VE0801',
(SELECT IFNULL(LPAD(REPLACE(IFNULL(SUM(C.MONTO),0), '.', ''), 15, '0'),
   '000000000000000') FROM TCPCB C WHERE C.SIGNO = "D" AND C.CODICLIE = TCPCB.CODICLIE),
(SELECT IFNULL(LPAD(REPLACE(IFNULL(SUM(C.MONTO),0), '.', ''), 15, '0'),
   '000000000000000') FROM TCPCB C WHERE C.SIGNO = "C" AND C.CODICLIE = TCPCB.CODICLIE),
(SELECT IFNULL(LPAD(REPLACE(((SELECT IFNULL(SUM(C.MONTO),0) FROM TCPCB C 
   WHERE C.SIGNO = "D" AND C.CODICLIE = TCPCB.CODICLIE)-(SELECT IFNULL(SUM(C.MONTO),0)
   FROM TCPCB C WHERE C.SIGNO = "C" AND C.CODICLIE = TCPCB.CODICLIE)), '.', ''), 15, '0'),
   '000000000000000')),
IFNULL(LPAD(UPPER(TCPCB.SIGNO), 1, ' '), " "),
IF(((((SELECT IFNULL(SUM(C.MONTO),0) FROM TCPCB C WHERE C.SIGNO = "D" AND C.CODICLIE = TCPCB.CODICLIE)-
   (SELECT IFNULL(SUM(C.MONTO),0) FROM TCPCB C WHERE C.SIGNO = "C" AND C.CODICLIE = TCPCB.CODICLIE))*
   DAY(LAST_DAY(NOW())))/
   (SELECT IFNULL(SUM(TOTADOCU),0) FROM TFACHISA WHERE TIPODOCU = "FA" AND CODICLIE = TCPCB.CODICLIE)-
   (SELECT IFNULL(SUM(TOTADOCU),0) FROM TFACHISA WHERE TIPODOCU = "DV" AND CODICLIE = TCPCB.CODICLIE)) < 0, "   0",
   LPAD(ROUND(((((SELECT IFNULL(SUM(C.MONTO),0) FROM TCPCB C WHERE C.SIGNO = "D" AND C.CODICLIE = TCPCB.CODICLIE)-
   (SELECT IFNULL(SUM(C.MONTO),0) FROM TCPCB C WHERE C.SIGNO = "C" AND C.CODICLIE = TCPCB.CODICLIE))*
   DAY(LAST_DAY(NOW())))/
   (SELECT IFNULL(SUM(TOTADOCU),0) FROM TFACHISA WHERE TIPODOCU = "FA" AND CODICLIE = TCPCB.CODICLIE)-
   (SELECT IFNULL(SUM(TOTADOCU),0) FROM TFACHISA WHERE TIPODOCU = "DV" AND CODICLIE = TCPCB.CODICLIE)),0), 4, " "))
INTO OUTFILE 'C:\\Users\\username\\Desktop\\gg.csv'
    FIELDS TERMINATED BY ';'
    ENCLOSED BY ''
    ESCAPED BY ''
    LINES TERMINATED BY '\n'
FROM TCPCB
INNER JOIN TFACHISA ON TFACHISA.CODICLIE = TCPCB.CODICLIE
WHERE 1 GROUP BY TCPCB.CODICLIE
这件事的关键是。。。。如果我删除了输出文件线,那么在7秒内就可以得到结果。。。。1.844 d/7.703 f。。。。发动机是MyISAM

PD:使用myisam,因为我只需要读取数据和处理值,然后我删除所有内容并保留csv。。。请原谅我的英语

谢谢

更新:

现在工作的过程是服务器端的conf,尝试新安装,一切都很好,但是现在当我使用where条件失去连接时,查询永远不会返回数据。。。。仅适用于where条件或内部连接

已解决:


很长时间,但最终解决了,使用MyISAM并在主字段中使用多个索引。。。。然而,在这里存储过程是个好主意。。。谢谢

我也遇到过类似的问题,时间太长,因为它在运行查询时将结果写入文件,速度非常慢,特别是如果要转储CSV的硬盘与存储数据库的硬盘相同

解决方案只是将原始查询打包到另一个SELECT查询中

因此,与其

SELECT * 
FROM tableA a INNER JOIN tableB b 
ON (a.b_id = b.id) 
INTO OUTFILE 'C:\\Users\\username\\Desktop\\gg.csv'
使用


这确保您首先运行查询,然后将所有内容写入文件。应该有一个更好的解决方案,比如只更改一个配置变量,避免每次都通过磁盘写入,但这对我来说已经奏效了。

这是一个可怕的查询。。。您是否尝试过对其进行解释,以了解outfile内容的打开和关闭会发生什么?如果您构建一个结果表,然后将结果表卸载到CSV,您会得到不同的结果吗?嗯。。。。我使用函数中给出的arrayliat构建了一个Java通用表来读取dbf文件,因此如果我使用explain mysql告诉我需要索引。。。我试过了,但结果一样
SELECT *
FROM (SELECT *
      FROM tableA a INNER JOIN tableB b 
      ON (a.b_id = b.id)) tm 
INTO OUTFILE 'C:\\Users\\username\\Desktop\\gg.csv'