5
回答
再来吐槽一个关于 MySQL 的索引合并问题
注册华为云得mate10,2.9折抢先购!>>>   

osc_answers 表的索引如下:

现在执行一个非常简单的查询语句:

SELECT COUNT(id) FROM osc_answers WHERE question = 78473 AND parent = 0

这个 SQL 语句居然要 100 多毫秒,EXPLAIN 看看居然是:

Using intersect(idx_answer_question,idx_answer_parent); Using where; Using index

这 MySQL 有点自作主张了吧??

关闭优化器开关:

SET optimizer_switch = 'index_merge_intersection=off'
再次执行上述 SQL 后,只需要几毫秒甚至是0,而 EXPLAIN 信息只有:

Using where

还有奇怪的问题是,本地和服务器上表结构和索引都一样的,本地就不会出现这种情况。

另外上述关闭优化器开关仅限于当前连接,如何永久关闭,关闭后会不会有其他影响?

举报
红薯
发帖于5年前 5回/2K+阅
顶部