在我们的应用程序中,我们必须使用表处理超过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秒。