mysql索引

mysql索引的四种类型:主键索引、唯一索引、普通索引和全文索引。

主键索引:
主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键。

唯一索引:
索引列的所有值都只能出现一次,即必须唯一,值可以为空。

普通索引 :
基本的索引类型,值可以为空,没有唯一性的限制。

全文索引:
全文索引的索引类型为FULLTEXT。全文索引可以在varchar、char、text类型的列上创建。可以通过ALTER TABLE或CREATE INDEX命令创建。对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。MyISAM支持全文索引,InnoDB在mysql5.6之后支持了全文索引。

索引的机制

为什么我们添加完索引后查询速度为变快?
传统的查询方法,是按照表的顺序遍历的,不论查询几条数据,mysql需要将表的数据从头到尾遍历一遍
在我们添加完索引之后,mysql一般通过BTREE算法生成一个索引文件,在查询数据库时,找到索引文件进行遍历(折半查找大幅查询效率),找到相应的键从而获取数据
3.常见问题

多大的数据量下建索引会有性能的差别?

什么样的情况下该对字段建索引?

4.解决方案

1、表的主键、外键必须有索引;

2、数据量超过300的表应该有索引;

3、经常与其他表进行连接的表,在连接字段上应该建立索引;

4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

5、索引应该建在选择性高的字段上;

5.编码实战
让我们来实际操作一下。

6.扩展思考
为什么加索引后会使写入、修改、删除变慢?

索引能让数据库查询数据的速度上升, 而使写入数据的速度下降,原因很简单的, 因为平衡树这个结构必须一直维持在一个正确的状态, 增删改数据都会改变平衡树各节点中的索引数据内容,破坏树结构, 因此,在每次数据改变时, DBMS必须去重新梳理树(索引)的结构以确保它的正确,这会带来不小的性能开销,也就是为什么索引会给查询以外的操作带来副作用的原因。

7.参考文献

https://www.cnblogs.com/aspwebchh/p/6652855.html

8.更多讨论
1.like 不能用索引?
尽量减少like,但不是绝对不可用,“xxxx%” 是可以用到索引的,

想象一下,你在看一本成语词典,目录是按成语拼音顺序建立,查询需求是,你想找以 “一"字开头的成语(“一%”),和你想找包含一字的成语(”%一%")

除了like,以下操作符也可用到索引:

<,<=,=,>,>=,BETWEEN,IN
<>,not in ,!=则不行
2.多列查询该如何建索引?
一次查询只能用到一个索引,所以 首先枪毙 a,b各建索引方案
a还是b? 谁的区分度更高(同值的最少),建谁!
当然,联合索引也是个不错的方案,ab,还是ba,则同上,区分度高者,在前
3.一次查询能用多个索引吗?
不能

BY : 西安分院 赵立鼐
视频链接:https://v.qq.com/x/page/u0717zp67w3.html
ppt:https://it-xzy.github.io/JAVA-NEW/20180925-A-java-1.html#/
---------------------
作者:zln313
来源:CSDN
原文:https://blog.csdn.net/zln313/article/details/82722200

原文地址:https://www.cnblogs.com/nietzsche2019/p/10933639.html