开发者社区> 问答> 正文

关于 MySQL 的索引合并的问题

osc_answers 表的索引如下:
37
现在执行一个非常简单的查询语句:
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
还有奇怪的问题是,本地和服务器上表结构和索引都一样的,本地就不会出现这种情况。

展开
收起
落地花开啦 2016-02-11 17:21:35 3166 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    四个列上都做索引是不太好的设计啊,
    “直接添加 question 和 parent 的复合索引”, 只能针对 WHERE question = 78473 AND parent = 0 这种情况
    我猜测是不是你的parent重复太多了(cardinality),这样使用了索引反而效率不高,因为大量的重复索引还得做一些额外的工作,针对你的查询我想是不是只在question 上建立一个索引就够了,你可以自己测试一下

    2019-07-17 18:40:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像