开发者社区> 问答> 正文

mysql 为什么多查询几个字段就不使用索引了

索引:
Inoodb 表
结构
id dtEventTime iType iMoney iAction

 时间           类型     金钱     动作

在 where 的两列上都有索引
1
SQl:
1
显示结果
1
进行count 查询, 显示没问题
但是如果我不count , 查询几个字段的值, 就不会索引, 就全表扫描了
1
1
''问题补充
其实我是想要 这个sql 语句的 结果
不同的动作下面钱的总和''**
1
动作1 100 元
动作2 200 元
这样的结果 , 这个索引怎么加比较合理呢 ?

展开
收起
蛮大人123 2016-02-08 16:01:48 4038 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    这个问题涉及到“覆盖索引”这个概念。你第一个查询是查count(*),实际上值需要使用索引test,就能完全得到结果,不需要回聚簇索引查其他字段,因此InnoDB认为用这个所以比全表扫描快。
    而第二个查询因为要访问iMoney,需要“回表”,用不上覆盖索引。
    另外一个原因是索引字段的顺序,如果你把 test定义为(iType, dtEventTime), 这个查询应该就能用上test这个索引。而现在字段顺序会导致你这个查询,即使要用这个索引,也只能用到第一个字段。这个explain结果说明InnoDB觉得这个字段的过滤效果不好,不如全表扫描。

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

相关电子书

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

相关镜像