我正在尝试将大型XML(大约700MB)导入MySQL数据库。它到目前为止工作但事情是,它非常慢。 XML包含大约300k条目。前100k条目非常快,从那时起每+1000个条目需要大约5分钟。
相应MySQL表的模式:
CREATE TABLE IF NOT EXISTS `articles` (
`PHAR` varchar(10) NOT NULL,
`PRDNO` varchar(10),
`SMCAT` varchar(5),
`DSCRLONGD` varchar(200),
`DSCRLONGF` varchar(200),
`QTYUD` varchar(10),
`QTYUF` varchar(10),
`IMG2` varchar(50),
`DSCRPACKD` varchar(200),
`DSCRPACKF` varchar(200),
`NOPCS` int(11),
`WEIGHT` varchar(50)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我想导入的xml:
<ARTICLE CREATION_DATETIME="2017-06-27T13:23:04.2814446+02:00" PROD_DATE="2017-06-27T00:00:00" VALID_DATE="2017-06-27T00:00:00" xmlns="http://www.hcisolutions.ch/index">
<ART DT="2016-08-08T00:00:00+02:00">
<PHAR>0020244</PHAR>
<PHARMACODE>20244</PHARMACODE>
<GTIN>7680316440115</GTIN>
<ARTNO>20244</ARTNO>
<GRPCD>M1</GRPCD>
<CDSO1>03.00.00.00</CDSO1>
<PRDNO>24538</PRDNO>
<SMCAT>C</SMCAT>
<SMNO>31644011</SMNO>
<HOSPCD>N</HOSPCD>
<CLINCD>N</CLINCD>
<ARTTYP>0</ARTTYP>
<VAT>2</VAT>
<SALECD>N</SALECD>
<INSLIM>N</INSLIM>
<LIMPTS>0</LIMPTS>
<GRDFR>0</GRDFR>
<TEMP>15/25</TEMP>
<BG>N</BG>
<EXP>60</EXP>
<QTY>30</QTY>
<DSCRD>FERRO-GRADUMET Depottabl 30 Stk</DSCRD>
<DSCRF>FERRO-GRADUMET cpr dépôt 30 pce</DSCRF>
<DSCRLONGD>Ferro-Gradumet Depottabl 30 Stk</DSCRLONGD>
<DSCRLONGF>Ferro-Gradumet cpr dépôt 30 pce</DSCRLONGF>
<SORTD>FERRO-GRADUMET DEPOTTABL 30 STK</SORTD>
<SORTF>FERRO-GRADUMET CPR DÉPÔT 30 PCE</SORTF>
<QTYUD>Stk</QTYUD>
<QTYUF>pce</QTYUF>
<MULT>1</MULT>
<NOPCS>30</NOPCS>
<MINI>14</MINI>
<DEPCD>N</DEPCD>
<LOACD>N</LOACD>
<STTOX>N</STTOX>
<GGL>N</GGL>
<SMDAT>1967-06-22T00:00:00+02:00</SMDAT>
<BAGDOSSIER>10696</BAGDOSSIER>
<DEL>false</DEL>
<ARTCOMP>
<COMPNO>1836</COMPNO>
<ROLE>H</ROLE>
<ARTNO1>685230</ARTNO1>
<ARTNO2>685230</ARTNO2>
<ARTNO3>685230</ARTNO3>
</ARTCOMP>
<ARTCOMP>
<COMPNO>1836</COMPNO>
<ROLE>V</ROLE>
<ARTNO1>685230</ARTNO1>
<ARTNO2>685230</ARTNO2>
<ARTNO3>685230</ARTNO3>
</ARTCOMP>
<ARTCOMP>
<COMPNO>5360</COMPNO>
<ROLE>L</ROLE>
<ARTNO1>685230</ARTNO1>
<ARTNO2>685230</ARTNO2>
<ARTNO3>685230</ARTNO3>
</ARTCOMP>
<ARTBAR>
<CDTYP>E13</CDTYP>
<BC>7680316440115</BC>
<BCSTAT>A</BCSTAT>
</ARTBAR>
<ARTCH>
<PHAR2>4204981</PHAR2>
<CHTYPE>SDO</CHTYPE>
<LINENO>1</LINENO>
<NOUNITS>30</NOUNITS>
</ARTCH>
<ARTPRI>
<VDAT>1999-01-01T00:00:00+01:00</VDAT>
<PTYP>PPUB</PTYP>
<PRICE>10.9</PRICE>
</ARTPRI>
<ARTPRI>
<VDAT>2005-07-22T00:00:00+02:00</VDAT>
<PTYP>PEXF</PTYP>
<PRICE>7.92</PRICE>
</ARTPRI>
<ARTINS>
<VDAT>2004-07-01T00:00:00+02:00</VDAT>
<INCD>3</INCD>
<NINCD>30</NINCD>
</ARTINS>
</ART>
<ART>...</ART
</ARTICLE>
我尝试使用以下MySQL命令导入它:
LOAD XML LOCAL INFILE'~ / Desktop / HCI / Article.xml'INTO TABLE文章ROWS 通过'';
识别我能做些什么来加快速度吗?其他XML(相同大小,可能更少的标签/属性)要快得多(它们总共需要5分钟)。
我很感激你能得到一些帮助。
我的机器:Apple Macbook Pro i7,3.1Ghz,16GB Ram,1TB SSD。
先谢谢男女老少。
答案 0 :(得分:0)
如何处理ARTCOMP
等(因此数据中缩进的部分)? FK关系?因为我认为你的内存不足而且MySQL决定使用tmp,或者系统开始交换。