在第一次100k条目之后,MySQL LOAD XML LOCAL变慢

时间:2017-06-28 19:08:44

标签: mysql xml shell

我正在尝试将大型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。

先谢谢男女老少。

1 个答案:

答案 0 :(得分:0)

如何处理ARTCOMP等(因此数据中缩进的部分)? FK关系?因为我认为你的内存不足而且MySQL决定使用tmp,或者系统开始交换。