mysql5.7官网直译优化和索引--mysql如何使用索引

48 篇文章 0 订阅
8.3 Optimization and Indexes 优化和索引
8.3.1 mysql怎么样使用索引
8.3.2 主键索引优化
8.3.3 外键索引优化
8.3.4 列索引
8.3.5 多列联合索引
8.3.6 验证索引的使用
8.3.7 innoDB和MyISAM索引策略集合
8.3.8 B-TREE索引和哈希索引的对比
8.3.9 索引延伸的使用
8.3.10 优化器使用产生的列的索引
提高SELECT操作性能的最好的方法是创建索引在一个或者是多个在查询中要被使用的列。 索引entries实际上指向的是表中的行数据,根据查询快速定义那些行和where条件匹配,并排除掉其他不匹配的行数据。所有的mysql数据类型都能够被索引。
虽然可以试着在查询中使用的每个列上都创建索引,但是没有必要的索引会浪费空间,并且也会浪费时间mysql去选择哪个索引可以使用。索引页增加了插入,更新,删除的代价,因为每个索引必须被更新。你必须找到一个平衡通过使用优化的索引集合快速的完成查询。
8.3.1 How MySQL Uses Indexes mysql怎么样使用索引
索引被用于快速的使用特别的列值查询行。没有索引的话,mysql必须从第一行开始接着读取整个表中的数据找到相关的行。表越大,代价越大。如果表中有一个索引在查询的列中,mysql能够快速的定位数据文件中,而不需要查看整个表数据。这会比单独读取每一行快很多。
大多数mysql索引(PRIMARY KEY,UNIQUE,INDEX,和FULLTEXT)是使用B-TREES存储的。除非:在空间数据类型的索引使用R-trees;内存表也支持哈希索引;InnoDB使用FULLTEXT 索引来到排序表。
总的来说,关于索引使用的说明在接下来讨论,而对于内存表使用的哈希索引的特点将会在8.3.8中的对比B树索引和哈希索引里说明。
MYSQL使用索引在这些操作:
1)快速的找到和where条件匹配的行。
2) 从关心的数据中排除行,如果可以多个索引,mysql通常会使用那个可以查找到最少数据行的索引(大多数选择的索引)。
3)如果表有个多列联合索引,任何左前缀索引都可以用于优化器去查找行。例如,如果你有也三列索引(col1,col2,col3),你能索引这些查询能力在(col1),(col1,col2),和(col1,col2,col3).更多信息,请看8.3.5的多列索引。
4)为了检索行从其他表完成连接操作,mysql能够使用索引在列上提高性能,如果列的大小和类型被声明是相同的话。在这个语境下,VARCHAR和CHAR被认为是相同的,如果他们被声明为相同大小的话。例如,varchar(10)和CHAR(10)是相同的大小,但是VARCHAR(10)和char(15)不是。
 对比不同的列(对比字符串列和时间列或者是数字列,比方说)可能会阻止使用索引,如果值不能直接对比的话。对于给出的值例如1在数字类型的列中,它可能对比等于任何数字值以字符串类型如'1',' 1','00001'或者'01.e1'.这个规则不会使用任何索引在字符串类型的列中。
5)为了找到MIN()或者MAX()值在有索引的列key_col.这是会被优化的通过处理器检查是否你使用where条件key_part_N=consant在索引key_col之前对比了所有值部分。在这种情况下,mysql完成一个简单的索引查对每一个MIN()或者MAX()表达式并且用常量代替。如果所有的表达式都被通过常量代替,查询一次返回。例如:
SELECT MIN(key_part2),MAX(key_part2)
  FROM tbl_name WHERE key_part1=10;
6)为了排序或者分组一张表如果排序或者分组的完成在一个左前缀索引通过一个合适的索引(例如,order by key_part1,key_part2).如果所有部分被按照DESC排序,索引会以倒序读取。具体请看8.2.1.13的order by 优化和8.2.1.14的group by的优化
7)在一些情况下,一个查询能够被优化检索值不需要查看数据行。(一个索引提供了所有查询必须的数据被称为覆盖索引)如果一个查询所使用的列被包含在某一个索引中,被查找的值可以通过索引树直接获取,非常快速:
SELECT key_part3 FROM tbl_name
  WHERE key_part1=1
索引对于小表的查询并不重要,或者说大表中发现查询处理几乎所有的行时,索引作用也不大。当一个查询需要处理所有行时,顺序读取比通过索引读取更快。顺序读取会减少磁盘访问,即使不是所有行都需要查询。具体看8.2.1.19的避免全表扫描的详解。
到此关于mysql怎么使用索引的说明就结束了,接下来我们要说明的是8.3.2的主键索引的优化。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值