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

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>索引列的顺序,当不需要考虑排序和分组时,将选择性最高的列放在索引的最前列是很好的。
		因为这时候索引的作用只是用来优化where条件的查找。
		当需要排序和分组时应该尽力去避免随机I/O
	4.4.聚簇索引
		聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。
		聚簇索引就是按照某个规则把数据存储在一起,就像是一个图书馆,有4排书架ABCD,
		每个书架有5层,每层有5个区间。当你看到A后你就知道后面是B。
		一张表只能有一个聚簇索引,因为你排列也只能用一个规则,就像这个图书馆,你总不能想按ABCD又想按ACBD
	4.5.覆盖索引:如果一个索引包含(或者说覆盖),所有需要查询的字段的值,我们就称之为覆盖索引
		MyISAM引擎可能压缩索引使之更小,所以和覆盖索引搭配是非常合适的。
		但须注意MyISAM是没有事务的,可用于查询多的情况MySQL只能使用B-Tree索引做覆盖索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值