假设我有以下xml
<Operations>
<Info Id="2265" cId="2" aId="5" />
<Info Id="2266" cId="2" aId="5" />
<Info Id="2266" cId="2" aId="6" />
<Info Id="2267" cId="2" aId="5" />
<Info Id="2267" cId="2" aId="6" />
</Operations>在不通过分配额外空间将值插入表的情况下,我希望计算属性cId和aId上具有不同值的节点数。
目前,我是通过将相同的数据插入到表中来实现的,但是数据非常大,在执行过程中占用了大量的临时空间。
有办法吗?
上面的预期输出为3
发布于 2023-05-23 15:41:22
不要强迫它进入RAM,让它根据需要使用磁盘。在桌子上有吗?还是只使用XML?
可能有一个LOAD DATA语句将其从XML转换为这样定义的表:
CREATE TABLE Operations (
id INT NOT NULL AUTO_INCREMENT,
cid TINYINT UNSIGNED NOT NULL,
aid TINYINT UNSIGNED NOT NULL,
PRIMARY KEY(id)
) ENGINE=InnoDB;该表可能比您的300 be要小。如果需要的话,让它溢出到磁盘。(不管怎么说,你几乎没有什么控制权。)身份证能有多大?我选择了最小的数据类型,但假设数字在0到255之间。如果需要,选择更大的数据类型。
那就去做
SELECT COUNT(DISTINCT cid, aid)
FROM Operations;这似乎是“属性cId和aId上具有不同值的节点数”,但看起来答案是2,即2,5和2,6。如果Info_id与计数相关,请解释一下。(这可能需要将其包括在LOAD DATA中。
如果要从电子表格导出数据,..。好吧,我认为XML是一种糟糕的方法。作为一种RDBMS友好格式,使用CSV文件更容易,速度更快。在此之后,3个SQL语句实现了目标:创建表、加载数据、选择。
https://dba.stackexchange.com/questions/327382
复制相似问题