Mysql如何避免全表检索

如何使查询语句性能更好?这个问题,在我们使用mysql时,一直会存在我们脑海中。通常我们会给一个字段或多个字段加索引,或者优化查询语句,或者给字段设置合适的数据类型,数据长度,等等。但是我们应该清楚,在何种情况下,mysql会使用全表检索,何种情况下不使用,以帮助我们获得更好的查询性能。

通常,当mysql使用全表检索时,我们在EXPLAIN SQL STATEMENT的时候,会发现type这一列显示为【ALL】,意味着,你得优化你的查询语句了。那么,哪些情况mysql会使用全表检索执行查询语句?有以下情况:

  1. 表格数据很少,使用全表检索会比使用索引检索更快。一般当表格总数据小于10行并且数据行的长度非常小的时候会使用全表检索。
  2. 在ON或者WHERE中,没有使用索引列作为查询条件;
  3. 使用了索引列与一个常量进行比较,但是mysql发现该索引列覆盖的数据太大,反而全表检索更快(一般当索引列覆盖的数据大于全表数据的30%时,会触发mysql使用全表检索)。
  4. 使用了一个覆盖了大部分数据的索引列与另外表的列进行关联查询,此时mysql会使用全表检索;

对于数据很少的表来说,通常会优先使用全表检索。对于大量数据的表,请使用以下技巧避免全表检索:

  1. 使用FORCE INDEX告诉Mysql使用全表检索会很慢,而使用索引会很快;
SELECT * FROM t1, t2 FORCE INDEX (index_for_column)
  WHERE t1.col_name=t2.col_name;
  1. 使用ANALYZE TABLE  <tbl_name> 更新索引的分布;
  2. 设置max_seeks_for_key=1000告诉MYSQL没有索引会覆盖超过1000条数据;

猜你喜欢

转载自blog.csdn.net/u013262534/article/details/82670589