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