24.MySQL优化Avoiding Full Table Scans

介绍

当使用全表扫描时EXPLAIN 的type字段输出ALL。通常以下情况可能趋向于全表扫描:

  • 表很小,全表扫秒比使用索引扫描更快,这对于行少于10行且行长度较短的表来说很常见。
  • 当ON或者WHERE条件中没有索引可以使用的条件时。
  • 将索引与常量值进行了比较,并且索引通过计算发现,这个常量值覆盖了整个表的大部分,通过全表扫描比索引扫描更快。
  • 使用的列的区分度较低(很多行匹配了键值),然后查询索引的下一列,在这种情况下,可能需要对索引,这种情况下MYSQL可能通过关键字扫描需要扫描很多杆件自,所以表扫描更快。

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

  • 使用更新的扫描表的键分布, ANALYZE TABLE tbl_name。

  • 使用FORCE INDEX强制使用索引,告诉优化器使用表扫描比指定的索引扫描代价高很多。

      SELECT * FROM t1, t2 FORCE INDEX (index_for_column)
      WHERE t1.col_name=t2.col_name;
    
  • 启用mysqld的与–max-seeks-for-key=1000 选项或使用SET max_seeks_for_key=1000告诉优化器:所有的索引都不会导致超过1000次的索引搜索。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值