mysql 避免全表_mysql8 参考手册--避免全表扫描优化

当MySQL使用全表扫描来解析查询时,EXPLAIN的输出显示type列中的所有内容。通常在以下情况下发生:

1、该表是如此之小,以至于执行表扫描要比打扰键查找要快得多。对于少于10行且行长较短的表,这是很常见的。

2、索引列 的ONor WHERE子句中没有可用的限制 。

3、您正在将索引列与常量值进行比较,并且MySQL已计算(基于索引树)(常量覆盖了表的很大一部分)并且表扫描会更快。请参见 第8.2.1.1节“ WHERE子句优化”。

4、您正在通过另一列使用基数较低的键(许多行与键值匹配)。在这种情况下,MySQL假定通过使用键,它可能会执行许多键查找,并且表扫描会更快。

对于小型表,表扫描通常是合适的,并且对性能的影响可以忽略不计。对于大型表,请尝试以下技术,以避免优化器错误地选择表扫描:

1、使用ANALYZE TABLE tbl_name更新的扫描表的键分布。

1、使用FORCE INDEX的扫描表告诉MySQL该表扫描是非常昂贵相比,使用给定的指标:

SELECT * FROM t1, t2 FORCE INDEX (index_for_column)

WHERE t1.col_name=t2.col_name;

使用该 --max-seeks-for-key=1000选项 启动mysqld或使用SET max_seeks_for_key=1000告诉优化器假定没有键扫描导致超过1000个键查找。请参见第5.1.8节“服务器系统变量”。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值