什么是索引?
索引就是一个DB提高效率查询
为什么要使用索引?
第一, 通过创建唯一索引,可以确定数据的唯一性
第二, 所以可以大大的加快检索的速度,
索引的分类?
主要分为四大类:
a).单列索引:
普通索引:就是为了查询更加快点
唯一索引:列中的值都是唯一的,但是可以为null
主键索引:列不能为null,比如说主键索引
b).组合索引:在表中多个列上创建的索引,只有查询条件使用了最左边的字段时,索引才能被使用。比如说有id,name,age三个列,如果使用的是name或者age ,name 这个索引就不会被使用。
c).全文索引:只有在MySIAM引擎上才能够发挥作用,只有字段的类型是CHAR,VARCHAR,TEXT的时候才会被使用。 (全文索引就相当于模糊查询),切记,一定不要使用 %like %
d).空间索引:空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有四种,GEOMETRY、POINT、LINESTRING、POLYGON。
索引的创建语法?
create table aaa
(id int unsigned primary key auto_increment ,
name varchar(32) not null default '');
索引的优缺点?
好处:
a).通过创建唯一索引,可以保证数据库每一行数据的唯一性。
b).可以大大的加快检索的速度
c).在使用分组和排序的时候,能大大的减少查询时间
不利的因素:
a).创建和维护索引比较消耗时间,索引会根据表空间的增加而增加
b).索引占物理空间,数据量越大,空间所占的物理空间就越大
c).当对表的进行增,删,改的时候,索引也要动态的维护,这样就降低了维护的速度。
创建索引需要注意的情况:
a).在经常搜索的列上创建索引
b).主键上创建唯一索引,不仅可以加快速度查询,而且可以确保数据唯一性
c).对表中数据很少的不要创建索引
d).对于一些数值比较少的不需要创建索引,比如说text,image …
e).一定不要是频繁更新的列
Mysql底层最常用的索引?
1.MySIAM(Mysql默认的引擎) 2.InnoDB 3.Memory 4.CSV 5.Archive
6.Blakhole 7.Mrg_Mysiam
Mysql底层常用索引之间的区别以及联系?
a).MYSIAM 是Mysql默认的引擎,它不支持事务,也不支持行级锁和外键(就是当执行Insert和Update的时候会将整个表锁定,所以导致效率变低)。MYSIAM在查询count的时候,他会有一个专门存储的地方,他平常一般都是CURD的时候,读的比较多。
如图:为MySIAM实现机制
b).InnoDB是对数据库ACID提供了支持,并且对行级锁和外键支持。他们的设计目标就是处理大容量的数据,InnoDB不支持全文的检索,启动比较慢,它不会保存行数。所以,查询count的时候,需要全表扫描,效率比较慢。如果需要使用事务的时候,该引擎是首选。<br/>
由于锁的力度非常小,所以在写表操作的时候,不会锁表,所以对并发度较高的场景下效率还是很高的。
两种引擎的差别以及什么时候使用?
a).大数据的时候还是建议InnoDB引擎,他支持事务的处理,InnoDB也能够利用日志回复数据,还有就是主键的查询InnoDB非常快的。大批量的插入操作MYISAM执行的效率高点,InnoDB在Update的时候效率要比MySIAM效率高点。
b)MySIAM引擎:
在Mysql的生成目录会有MYI,MYD,frm文件。他是这样根据索引查数据的。结构中存储的内容实际上是地址值,这种索引称为非聚集索引
c).InnoDB引擎:
在mysql生成目录只有frm,idb文件,他是这样查找数据的,他的数据结构中存储的都是实际的数据,所以被称为聚集索引。
如图:两种之间的区别
更多关于Mysql索引:
https://blog.csdn.net/gitchat/article/details/78787837
MySql创建索引
https://www.cnblogs.com/sweet521/p/6203360.html
文章来源网络,版权归作者本人所有,如侵犯到原作者权益,请与我们联系删除或授权事宜
如果有误,请联系作者更改,谢谢,本人微信:void666666