服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Mssql|Oracle|Redis|

服务器之家 - 数据库 - Mysql - Mysql如何避免全表扫描的方法

Mysql如何避免全表扫描的方法

2019-10-24 17:38mysql教程网 Mysql

如果MySQL需要做一次全表扫描来处理查询时,在 EXPLAIN 的结果中 type 字段的值是 ALL。

在以下几种条件下,MySQL就会做全表扫描:

1>数据表是在太小了,做一次全表扫描比做索引键的查找来得快多了。当表的记录总数小于10且记录长度比较短时通常这么做。

2>没有合适用于 ON 或 WHERE 分句的索引字段。

3>让索引字段和常量值比较,MySQL已经计算(基于索引树)到常量覆盖了数据表的很大部分,因此做全表扫描应该会来得更快。

4>通过其他字段使用了一个基数很小(很多记录匹配索引键值)的索引键。这种情况下,MySQL认为使用索引键需要大量查找,还不如全表扫描来得更快。

对于小表来说,全表扫描通常更合适。但是对大表来说,尝试使用以下技术来避免让优化程序错误地选择全表扫描:

1>执行 ANALYZE TABLE tbl_name 更新要扫描的表的索引键分布。

2> 使用 FORCE INDEX 告诉MySQL,做全表扫描的话会比利用给定的索引更浪费资源。

SELECT * FROM t1, t2 FORCE INDEX (index_for_column)

WHERE t1.col_name=t2.col_name;

3>启动 mysqld 时使用参数 --max-seeks-for-key=1000 或者执行 SET max_seeks_for_key=1000 来告诉优化程序,所有的索引都不会导致超过1000次的索引搜索。

延伸 · 阅读

精彩推荐
  • MysqlMySQL5.6的zip包安装教程详解

    MySQL5.6的zip包安装教程详解

    这篇文章主要介绍了MySQL5.6的zip包安装教程,需要的朋友可以参考下...

    4432019-06-15
  • MysqlGROUP_CONCAT的用法

    GROUP_CONCAT的用法

    今天工作需要,要用到group by等等,查看手册,没想到发现了GROUP_CONCAT这个好东西,一下在省掉了我很多工作,这个函数在 MySQL 4.1 中被加入。函数返回一个...

    脚本之家3252019-10-17
  • Mysqlmysql 时间转换函数的使用方法

    mysql 时间转换函数的使用方法

    mysql 时间转换函数的使用方法,都是实例,大家可以参考一一写一下 ...

    mysql技术网2242019-10-23
  • MysqlCentOS 7中升级MySQL 5.7.23的坑与解决方法

    CentOS 7中升级MySQL 5.7.23的坑与解决方法

    我们在安装升级的时候会遇到一些问题,不过可能每个人遇到的问题不一样,多找找才能解决问题哟,下面这篇文章主要给大家介绍了关于在CentOS 7中升级...

    wangdong3082019-06-19
  • MysqlMySQL8.0新特性之支持原子DDL语句

    MySQL8.0新特性之支持原子DDL语句

    这MySQL 8.0开始支持原子数据定义语言(DDL)语句。此功能称为原子DDL。这篇文章主要介绍了MySQL8.0新特性——支持原子DDL语句,需要的朋友可以参考下...

    一个笨小孩3622019-07-01
  • MysqlMySQL新手入门指南--快速参考

    MySQL新手入门指南--快速参考

    以下是一些重要的SQL快速参考,有关SQL的语法和在标准SQL上增加的特性,请查询MySQL手册。 ...

    mysql技术网3852019-10-15
  • Mysqlmysql中的“money”类型说明

    mysql中的“money”类型说明

    mysql没有money类型 sql server才有money类型 ...

    mysql教程网2812019-10-23
  • Mysql深入浅出讲解MySQL的并行复制

    深入浅出讲解MySQL的并行复制

    这篇文章主要给大家介绍了关于MySQL并行复制的相关资料,文中通过示例代码介绍的非常详细,对大家学习或使用mysql具有一定的参考学习价值,需要的朋友...

    兰春1802019-07-01