【发布时间】:2016-12-04 17:34:36
【问题描述】:
我们的数据库结构以这种方式对我们的大多数核心对象使用元表:
db_object: id (PRIMARY KEY), field1, field2,... db_object_meta:id(主键)、object_id、meta_key、meta_value
我们已经运行了几个月,没有出现任何重大问题,但最近我们遇到了一些严重的延迟,我们的元表可能是罪魁祸首,因为它们已经增长到(500,000 行以上)。
我们主要以直接的方式查询元表,例如:
SELECT `id` FROM `db_object_meta WHERE `object_id` = 9999
SELECT `meta_key`, `meta_value` FROM `db_object_meta WHERE `object_id` = 9999
SELECT `meta_value` FROM `db_object_meta WHERE `object_id` = 9999 AND `meta_key` = 'key1'
似乎是这些类型的查询被阻塞并导致了瓶颈。可以做些什么来提高效率?
向 object_id 列添加 INDEX 是否会提高性能,这是否会使所有现有查询保持不变且无需调整?
我标记了 Wordpress,因为我知道它深入使用了发布元表。
创建表(从评论中添加)
CREATE TABLE wm_object_meta (
id int(32) NOT NULL,
store_id int(32) NOT NULL,
object_id int(32) NOT NULL,
meta_key varchar(64) NOT NULL,
meta_value longtext NOT NULL,
PRIMARY KEY (id),
KEY object_id (object_id,meta_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
【问题讨论】:
标签: php mysql wordpress indexing metadata