mysql group by能用到索引吗_MySQL如何确定它是否使用GROUP BY的索引?

一篇关于MySQL中GROUP BY查询性能优化的文章,通过实例展示了如何通过强制使用索引来显著减少查询时间,从8秒降低到0.5秒。文章讨论了MySQL 5.1.41版本中MyISAM表类型下,GROUP BY查询默认不使用索引的情况,并提出了使用FORCE INDEX的解决方案。
摘要由CSDN通过智能技术生成

我有一张简单的桌子

stock_ledger_id INT(10) (Primary)

piece_to_bin_id INT(10)

quantity INT(11)

create_datetime TIMESTAMP

... and a few VARCHARs

一些简单的索引

Key_name Cardinality

PRIMARY 1510443

piece_to_bin_id 100696

这个相当简单的查询大约需要8秒钟:

SELECT piece_to_bin_id,

SUM(quantity),

MAX(create_datetime)

FROM stock_ledger

GROUP BY piece_to_bin_id

这是EXPLAIN:

id select_type table type possible_keys key key_len ref rows Extra

1 SIMPLE stock_ledger ALL NULL NULL NULL NULL 1512976 Using temporary; Using filesort

我发现通过强制索引可以将它降低到约0.5秒:

SELECT piece_to_bin_id,

SUM(quantity),

MAX(create_datetime)

FROM stock_ledger

FORCE INDEX (piece_to_bin_id)

GROUP BY piece_to_bin_id

然后EXPLAIN看起来像这样:

id select_type table type possible_keys key key_len ref rows Extra

1 SIMPLE stock_ledger index NULL piece_to_bin_id 4 NULL 1512976

我使用MySQL 5.1.41,表是MyISAM,我之前运行过ANALYZE TABLE.

所以我坚持“MySQL再次出错,只是强制索引”或者是否存在MySQL使用全表扫描的实际原因?也许我能解决一个问题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值