从数据透视表到平面表的转换耗时

时间:2013-05-24 10:23:57

标签: java mysql pivot dynamic-data pivot-table

在我们的应用程序中,我们必须使用表处理超过300k的记录,其结构类似于数据透视表。

 CREATE TABLE properties (
   id INT(11) NOT NULL AUTO_INCREMENT,
   item_id INT(11) DEFAULT NULL,
   property_name VARCHAR(255) DEFAULT NULL,
   value VARCHAR(255) DEFAULT NULL,
   PRIMARY KEY (id)
);

但是制作一个平面表(即将行转换为列)的查询本身需要超过15秒。查询是

 SELECT
     item_id,
     MAX(IF(property_name = 'feildName1', value, NULL)) AS feildName1,
     MAX(IF(property_name = 'feildName2', value, NULL)) AS feildName2,
     MAX(IF(property_name = 'feildName3', value, NULL)) AS feildName3,
     MAX(IF(property_name = 'feildName4', value, NULL)) AS feildName4,
     MAX(IF(property_name = 'feildName5', value, NULL)) AS feildName5
  FROM
  properties as p
  GROUP BY
  item_id;

我的要求是我有一个表单,它将包含动态字段。为了处理动态字段,我正在采用将行转换为列的方法,如下所示 - >

具有数据透视表格值的表格 -

      ID |  ITEM_ID |   PROPERTY_NAME   | VALUE        |
      -------------------------------------------------
      1  |     1    |   feildName1      |  kepl1       | 
      2  |     1    |   feildName2      |  exit1       |  
      3  |     1    |   feildName3      |  interview1  |  

平台

      ITEM_ID |  feildName1 |   feildName2 | feildName3 |
      ---------------------------------------------------
      |     1 |   kepl1     |  exit1       | interview1 |

所以最终搜索查询将在Flat表上。但是从数据透视表到平台的转换时间超过15秒。

0 个答案:

没有答案