MySQL优化(二)
2016-11-13 19:39
197 查看
索引的使用
Index索引与数据的关系:
字典中:
拼音检索 字的解释。
部首检索 字的解释。
关键字:数据的某个用于建立索引的属性值。
Tip:索引都是按照关键字排序的。
辨析:
约束constraint: 功能在于限制
索引index: 功能在于定位记录
联系是:
约束依赖于索引来实现的
索引的分类
索引的使用类型角度:4种分类:主索引: 要求关键字 唯一 并且不能为空。
唯一索引: 要求关键字唯一的。
普通索引: 任意属性都可以作为关键字,来进行索引。
全文索引: 创建索引时,不是依据具体字段的值,而是利用数据内提取的有效关键字来建立索引。
Tip:无论何种索引,功能都是利用关键字定位记录位置。
差异:各个索引对关键字的要求上。
管理索引的语法
添加索引创建表时,一起添加索引:
索引类型 `可选的索引的名字` (索引的字段列表)
其中索引的名字:可选的。如果不指定,采用字段列表中的第一个字段来为索引命名。
主索引没有名字,原因表仅仅可以存在一个主索引,其他类型的索引可以出现多次。
修改表结构,添加索引:
还可以在字段后,直接索引类型。但是不能建立多字段索引。
如果在多个字段建立一个索引,该索引也称复合索引。
删除索引:
Alter table table_name drop primary key;
Alter table table_name drop index `索引名`;
执行计划– explain
通过explain语句,来解释查看 一条 select语句所形成的执行计划。(tip:<5.6仅仅支持select语句的执行计划)
Explain select 语句
返回该select语句的执行计划,但是不会真正执行该select语句。
Rows:需要从数据源中获得多少数据,才能得到最后的结果。
索引的使用原则
全值匹配:
相等范围匹配:
大于,小于左值原则:
其一:如果使用Like查询,要求不以通配符(%_)开头。其二:复合索引中,只有字段列表中左边的字段值确定,右边的字段才能使用索引。
多个字段,要求左边字段先确定索引:
列独立:
列必须独立出现在表达式的一端。独立之后:
Or表达式要求每个字段都有可用的索引,最终才会使用索引:
都有索引:
Mysql判断使用索引不会比全表扫描要快
原因,扫描索引后定位数据,随机的磁盘IO。但是全表扫描,顺序的磁盘IO。当获取的数据量过多时,会选择使用全表扫描的顺序IO代替使用索引的随机IO.