学习《高性能MySQL》笔记-索引篇

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/libra_ts/article/details/81949093

1.索引释义:

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。比如书本的目录,那几页目录就是索引内容,目录中的维度比如“章节名称”、“首字母”对应的就是索引的列。

2.索引优点:

2.1>索引大大减少了服务器需要扫描的数据量
2.2>索引可以帮助服务器避免排序和临时表
2.3>索引可以将随机I/O变为顺序I/O

3.怎么评判优秀索引

在《高性能MySQL》中文第三版提到了索引“三星系统”原则:
3.1>索引将相关的记录放到一起,则获得一星
3.2>如果索引中的数据顺序和查找中的排列顺序一致则获得二星
3.3>如果索引中的列包含了查询中的需要的全部列则获得三星

个人理解:
1."索引将相关的记录放到一起",这段话真的无法理解,什么算相关记录?和什么相关?
2."索引中的数据顺序和查找中的排列顺序一致",根据索引筛选出的数据顺序和where条件结果集顺序一致?还是不懂。
3."如果索引中的列包含了查询中的需要的全部列",这个是指“覆盖索引”,建一个包含所有返回字段字段的组合索引。

4.高性能的索引策略

4.1>独立的列
    “独立的列”是指索引不能是表达式的一部分,也不能是函数的参数
4.2>前缀索引和索引选择器
    前缀索引如果太长会让索引很大且很慢,太短选择性又会很低。多少合适呢?可以根据“索引选择性”来判定.
    索引选择性=(根据索引筛选出的条数)/(表中总记录),越接近1选择性越好。例如唯一索引,选择性为1性能最好。
    判定标准:当前缀索引选择性和和完整列的选择性接近一致时,基本上就可以用了
    创建前缀索引:
    alter table t_user add key (phone(7));
    前缀索引能使索引更小、更快,但是也有其缺点:mysql无法使用前缀索引做ORDER BY和GROUP BY,
    也无法使用前缀索引做覆盖扫描(什么叫覆盖扫描?)
4.3>多列索引
    即把多个单列索引合并到一起,创建一个包含多个列的索引。其中多列索引需要注意以下几点:
    4.3.1>
4.4>选择合适的索引列顺序
    对于如何决定多列索引的列顺序:当不需要考虑排序和分组时,将选择性最高的列放在索引的最前列是很好的。
    因为这时候索引的作用只是用来优化where条件的查找。当需要排序和分组时应该尽力去避免随机I/O
4.5>聚簇索引
    聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。
    聚簇索引就是按照某个规则把数据存储在一起,就像是一个图书馆,有4排书架ABCD,
    每个书架有5层,每层有5个区间。当你看到A后你就知道后面是B。
    一张表只能有一个聚簇索引,因为你排列也只能用一个规则,就像这个图书馆,你总不能想按ABCD又想按ACBD
4.6>覆盖索引:如果一个索引包含(或者说覆盖),所有需要查询的字段的值,我们就称之为覆盖索引
    MyISAM引擎可能压缩索引使之更小,所以和覆盖索引搭配是非常合适的。
    但须注意MyISAM是没有事务的,可用于查询多的情况MySQL只能使用B-Tree索引做覆盖索引

猜你喜欢

转载自blog.csdn.net/libra_ts/article/details/81949093