mysql - 在“meta_value”中搜索值时加快 WordPress 查询
问题描述
关于如何加快meta_value
在postmeta
表中搜索数据的 WordPress 查询的任何提示?
postmeta
表包含不到 500 万条记录。自定义 WP 插件处理数据的时间太长。我追踪了哪个查询实际上变慢了并发现了这一点。该查询是运行时get_posts
运行的 60 多个查询之一,但这个查询占用了 99% 的处理时间。
SELECT wp_wordpress_posts.* FROM wp_wordpress_posts
INNER JOIN wp_wordpress_postmeta ON (wp_wordpress_posts.ID = wp_wordpress_postmeta.post_id)
INNER JOIN wp_wordpress_postmeta AS mt1 ON (wp_wordpress_posts.ID = mt1.post_id)
WHERE 1=1
AND wp_wordpress_posts.post_type = 'my_booking'
AND (wp_wordpress_posts.post_status = 'publish')
AND ( (wp_wordpress_postmeta.meta_key = '_rooms' AND CAST(wp_wordpress_postmeta.meta_value AS CHAR) = '236742')
AND (mt1.meta_key = '_bookingDate' AND CAST(mt1.meta_value AS CHAR) = '2018-09-18') )
GROUP BY wp_wordpress_posts.ID ORDER BY wp_wordpress_posts.post_date DESC
我开始测试简化版
SELECT wp_wordpress_postmeta.* FROM wp_wordpress_postmeta
WHERE meta_key = '_rooms' AND CAST(meta_value AS CHAR) = '236742'
处理此查询大约需要一秒钟。我意识到无论是谁编写了插件,都将可搜索的数据存储在meta_value
设置为的字段中,LONGTEXT
因此无法对其进行索引。由于可搜索的数据很短,我在meta_key
andmeta_value
ALTER TABLEwp_wordpress_postmeta
添加键(meta_key(100), meta_value(100))
我运行了简短的查询,它提高了速度,使查询运行速度提高了 5 倍。我再次尝试了长查询,它没有对其进行任何改进。我尝试从长查询中运行另一个查询
SELECT wp_wordpress_postmeta.* FROM wp_wordpress_postmeta
WHERE meta_key = '_bookingDate' AND CAST(meta_value AS CHAR) = '2018-09-18'
处理此查询大约需要一秒钟。为什么这个查询没有像第一个查询那样从缩短的索引中看到任何改进?我该如何解决?
解决方案
推荐阅读
- java - (问题已解决)(Maven运行配置)在本地tomcat服务器中更改java项目
- css - CSS 不透明度过渡
- dictionary - Tableau Server 中地图的地理图层
- flutter - 如何在颤振(飞镖)中重新加载 CheckboxListTile?
- r - 在 geom_col 躲避位置中未保留的组内排序
- python - 如何从另一个屏幕获取字段值?
- powershell - Powershell + csv:读取第1列,修改内容并将其写在第2列中
- reactjs - 在使用 react-dnd 的 react typescript 中使用 useDrag({}) 方法时出错
- django - Django 将请求传递给 to_representation 方法
- java - 在不计算它们的值的情况下对 String 中提供的大数字列表进行排序