我试图通过向慢查询日志中出现的查询添加索引来提高锤击 wordpress 数据库的性能。
在 MS SQL 中,您可以使用查询提示来强制查询使用索引,但如果您正确覆盖列等,通常很容易让查询使用索引。
我有这个查询经常出现在慢查询日志中
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish')
ORDER BY wp_posts.post_date DESC
LIMIT 18310, 5;
wp_posts
我在 on上创建了一个覆盖唯一索引post_date, post_status, post_type and post_id
并重新启动了 MySQL,但是当我运行解释时,使用的索引是
status_password_id
在可能的键中,我的新索引甚至没有出现,尽管它是一个覆盖索引,例如我刚刚得到
type_status_date,status_password_id
因此,使用的索引或如果 MySQL 有一个“优化器”的可能选择,甚至都没有考虑我的索引,它的第一列是 post_date。我会想到一个基本上是在做 TOP 并按日期排序的查询
ORDER BY wp_posts.post_date DESC LIMIT 18310, 5;
是否希望使用按日期排序的索引以提高速度,尤其是具有满足查询所需的所有其他字段的索引?
MySQL 是否有查询提示来强制索引用于速度/性能测试,或者我需要做些什么来查看为什么这个索引被忽略。
如果 Navicat 有像 MS SQL 这样的可视化查询执行计划,我会很高兴,但似乎 EXPLAIN 是它所能提供的最好的。
任何对我如何强制使用索引或弄清楚为什么它被忽略的任何提示的人都会非常有帮助!
谢谢