1

在我们的应用程序中,我们必须使用一个表来处理超过 30 万条记录,其结构类似于数据透视表。

 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 |

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

4

0 回答 0