MySQL高级知识(三)——索引

前言:索引在sql调优部分占据着重要的位置,了解并深刻索引对咱们来讲也是很是重要的。本篇主要介绍MySQL中索引的相关知识点。html


1.索引是什么

MySQL官方对索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构。所以索引的本质就是数据结构。索引的目的在于提升查询效率,可类比字典、书籍的目录等这种形式。算法

可简单理解为“排好序的快速查找数据结构”。在数据以外,数据库系统还维护着知足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就能够在这些数据结构上实现高级查找算法,这种数据结构就是索引sql

通常来讲,索引自己也很大,不可能所有存储在内存中,所以索引每每以索引文件的形式存储在磁盘上。数据库

日常所说的索引,若是没有特别指明,都是B树索引。其中汇集索引、次要索引、覆盖索引、前缀索引、惟一索引默认都是用B树。数据结构

经过show index from tablename能够查看表的索引状况。并发

2.索引的优缺点

优势高并发

①相似大学图书馆的书目索引,提升数据的检索效率,下降数据库的IO成本。优化

②经过索引列对数据进行排序,下降数据的排序成本,从而下降CPU的消耗。spa

缺点code

①索引实际上也是一张表,该表保存了主键与索引字段,并指向实体表的记录,因此索引列也要占用空间

②虽然索引大大提升了查询效率,可是下降了更新表的速度,如insert、update和delete操做。由于更新表时,MySQL不只要保存数据,还要保存索引文件每次更新的索引列字段,而且在更新操做后,会更新相应字段索引的信息。

③索引只是提升查询效率的一个因素,若是你的MySQL有大量的数据表,就须要花时间研究创建最优秀的索引或优化查询语句。

3.索引分类

索引主要分为如下三类:

单值索引:一个索引只包含单个列,一个表能够有多个单值索引。

惟一索引:索引列的值必须惟一,但容许有空值,主键就是惟一索引。

复合索引:一个索引包含多个列

索引的结构:

①BTREE索引;②Hash索引;③Full-Text索引;④R-Tree索引。

4.基本语法

①建立索引

create [unique] index indexname on tablename(columnname(length)); alter table tablename add index indexname (columnname(length));

注:若是是char、varchar类型的字段,length能够小于字段实际长度;若是是blob、text类型,必须指定length。

②删除索引

drop index indexname on tablename;

③查看索引

show index from tablename;

④其余建立索引的方式

1.添加主键索引 
ALTER TABLE `table_name` ADD PRIMARY KEY (`column`) 

2.添加惟一索引
ALTER TABLE `table_name` ADD UNIQUE (`column`) 

3.添加全文索引
ALTER TABLE `table_name` ADD FULLTEXT (`column`) 

4.添加普通索引
ALTER TABLE `table_name` ADD INDEX index_name (`column` ) 

5.添加组合索引 
ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, `column3`)

5.创建索引与否的具体状况

①需创建索引的状况

#1.主键自动创建惟一索引。

#2.频繁做为查询条件的字段。

#3.查询中与其余表关联的字段,外键关系创建索引。

#4.高并发下趋向建立组合索引。

#5.查询中排序的字段,排序字段若经过索引去访问将大大提升排序速度。

#6.查询中统计或分组字段。

②不须要建立索引的状况

#1.表记录太少。(数据量太少MySQL本身就能够搞定了)

#2.常常增删改的表。

#3.数据重复且平均分配的字段,如国籍、性别,不适合建立索引。

#4.频繁更新的字段不适合创建索引。

#5.Where条件里用不到的字段不建立索引。


by Shawn Chen,2018.6.21日,下午。


相关内容

MySQL高级知识系列目录

相关文章
相关标签/搜索