我想存储我在"实体"表上所做的更改.这应该像一个日志.目前它在MySQL中使用此表实现:
CREATE TABLE `entitychange` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`entity_id` int(10) unsigned NOT NULL,
`entitytype` enum('STRING_1','STRING_2','SOMEBOOL','SOMEDOUBLE','SOMETIMESTAMP') NOT NULL DEFAULT 'STRING_1',
`when` TIMESTAMP NOT NULL,
`value` TEXT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
entity_id=我entity桌子的主键.entitytype= entity表中更改的字段.有时只改变一个字段,有时多个.一个变化=一排.value =字段"新值"的字符串表示形式.将Field entity.somedouble从3 更改为2 时的示例,我运行这些查询:
UPDATE entity SET somedouble = 2 WHERE entity_id = 123;
INSERT INTO entitychange (entity_id,entitytype,value) VALUES (123,'SOMEDOUBLE',2);
Run Code Online (Sandbox Code Playgroud)
我需要select更改过去15天的特定实体和实体类型.例如:最后15天内最后一次更改SOMEDOUBLE为entity_id 123.
现在,有两件事我不喜欢:
TEXT- 虽然大多数(小于1%)不是真正的文本,但就我而言,大多数值都是DOUBLE.这是一个大问题吗? …mysql database-design temporal-database database-partitioning entity-attribute-value
我在1000个MySQL表中的每个表中都有几个TEXT和/或MEDIUMTEXT字段.我现在知道TEXT字段在查询时写入磁盘而不是内存.即使在查询中没有调用该字段,这也是正确的吗?例如,如果我有一个包含2个字段(id int(11)和注释文本)的表(tbExam)并运行SELECT id FROM tbExam,MySQL是否仍然必须在返回结果之前将其写入磁盘,否则它将运行该查询在记忆中?
我试图找出是否需要重新配置我们的实际数据库表以切换到varchar(xxxx)或保留文本字段并重新配置查询.