寻求优化方案
笑容为你 2012-08-21 08:26:49 我要在数据库中存储对象,于是设计了以下表:
--
-- 表的结构 `tb_class`//存类名称
--
CREATE TABLE IF NOT EXISTS `tb_class` (
`class_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`class_name` varchar(200) CHARACTER SET utf8 NOT NULL DEFAULT '',
PRIMARY KEY (`class_id`)
);
--
-- 表的结构 `tb_property`//存类属性
--
CREATE TABLE IF NOT EXISTS `tb_property` (
`property_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`class_id` int(11) unsigned NOT NULL,
`property_name` varchar(200) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`property_id`),
KEY `index1` (`class_id`)
) ;
--
-- 表的结构 `tb_object`//存对象名称
--
CREATE TABLE IF NOT EXISTS `tb_object` (
`object_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`class_id` int(11) unsigned NOT NULL,
`object_name` varchar(100) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`object_id`),
KEY `index1` (`class_id`)
) ;
--
-- 表的结构 `tb_value`//存对象的值
--
CREATE TABLE IF NOT EXISTS `tb_value` (
`value_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`object_id` int(11) unsigned NOT NULL,
`property_id` int(11) unsigned NOT NULL,
`value` varchar(1000) CHARACTER SET utf8,
PRIMARY KEY (`value_id`),
KEY `index1` (`object_id`),
KEY `index2` (`property_id`)
) ;
-- --------------------------------------------------------
因为要存的对象有千万之多,按每个对象有20个属性算,tb_value得有1千万*20条记录,所以tb_value表大得惊人,查询效率低下!
我想不出更好的方法了,所以在这里向各位寻求好的方案
注:tb_class中的类有几千甚至上万,所以不能按类来做分表