php - 元表效率低下

标签 php mysql wordpress indexing metadata

我们的数据库结构以这种方式利用大多数核心对象的元表:

db_object:id(主键),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 

最佳答案

object_id 上的索引可能会有所帮助,这取决于表中有多少个不同的 object_id 值。一般来说,向 where 子句中使用的任何字段添加索引很有可能提高性能。

编辑:不,添加索引不需要您更改任何现有查询或语句。

关于php - 元表效率低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38668327/

相关文章:

mysql - JDBC 到 mysql 5.7.21 和 java 1.8.0_162;不支持的记录版本 Unknown-0.0

MySQL – 在 5.6 之前的 SELECT 中断中同时进行浮点增量和赋值

php - Wordpress 要求提供 FTP 凭据以进行升级

iphone - iPhone 上的文字颤抖

php - Mysql group by 和 Left join 关联表 PHP Yii2

javascript - 如何将 localStorage 从 JS 发送到 PHP 文件(?)

php - Xdebug 在 VS Code 中不存在的断点处停止

php - 如何不向浏览器输出图像?

php - AWS 上的 Laravel 应用程序。 503错误

php - AWS AssumeRole - 用户无权执行 : sts:AssumeRole on resource