将索引添加到wp_postmeta中的meta_value

时间:2018-02-01 作者:superhenke

为了在Wordpress中进行更快的查询,是否可以将索引添加到wp\\U POSTETA表中的meta\\U value列?

wp\\U Posteta表中有大约500万行,当限制为500行时,我的查询大约需要3秒钟。

我试图在phpMyAdmin中为meta\\u值添加索引,但收到一条错误消息,上面说:

键规范中使用的“meta\\u value”列没有键长度

我曾考虑将其转换为varchar(255),但我有一个元值\\u wp\\u attachment\\u metadata,大约1500个字符长。

我的查询如下所示:

Array
(
    [posts_per_page] => 500
    [orderby] => name
    [order] => ASC
    [post_type] => company
    [post_status] => publish
    [meta_query] => Array
        (
            [relation] => OR
            [0] => Array
                (
                    [key] => example1
                    [value] => 2
                    [type] => numeric
                    [compare] => =
                )

            [1] => Array
                (
                    [key] => example2
                    [value] => 2
                    [type] => numeric
                    [compare] => =
                )

            [2] => Array
                (
                    [key] => example3
                    [value] => 2
                    [type] => numeric
                    [compare] => =
                )

            [3] => Array
                (
                    [key] => example3
                    [value] => 2
                    [type] => numeric
                    [compare] => =
                )

        )

)

2 个回复
SO网友:janh

不要限制字段,而是限制索引,例如。

ALTER TABLE wp_postmeta ADD key(meta_value(100))
这将索引限制为meta\\u值的前100个字节。

您可能需要一个关于post\\u id、meta\\u key、meta\\u值的索引来进行连接。例如,需要多少meta\\u键和meta\\u值取决于您的数据

ALTER TABLE wp_postmeta ADD key(post_id, meta_key(100), meta_value(100));
这是否有助于您的查询是另一个问题。获取生成的SQL$query->request 然后用“EXPLAIN$SQL”运行它,看看MySQL是如何处理它的,使用了哪些索引等等。

SO网友:lkraav

奥利·琼斯正在与https://wordpress.org/plugins/index-wp-mysql-for-speed/ 马上

他目前对现代梭鱼存储引擎支持的表的建议是

ALTER TABLE wp_postmeta
  ADD UNIQUE KEY meta_id (meta_id),
  DROP PRIMARY KEY,
  ADD PRIMARY KEY (post_id, meta_key, meta_id),
  DROP KEY meta_key,
  ADD KEY meta_key (meta_key, meta_value(32), post_id, meta_id),
  ADD KEY meta_value (meta_value(32), meta_id),
  DROP KEY post_id;
请参见https://www.plumislandmedia.net/index-wp-mysql-for-speed/tables_and_keys/ 有关详细信息。

结束

相关推荐

Split posts between databases

我的客户要求为基于WP的wordpress(单站点,而不是多站点)提供一个非常具体的解决方案。基本上,他想要的是,假设在1000篇文章之后,应该创建新的数据库(只有5个表,posts,posmeta和3个与分类相关的表),新的文章应该和所有的post meta一起存储在这个数据库中,直到它达到1000篇文章,然后处理重复。具有挑战性的部分是,所有这些数据库必须同时处于活动状态,因此WP应该能够同时访问来自主数据库和所有这些新创建的数据库(有5个表)的帖子。这可能需要hyperdb. 问题包括:如何告诉wp