5
回答

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
还有奇怪的问题是,本地和服务器上表结构和索引都一样的,本地就不会出现这种情况。
另外上述关闭优化器开关仅限于当前连接,如何永久关闭,关闭后会不会有其他影响?