数据库索引学习(一)

索引类型

聚集索引:以主键创建的索引,存储的是表中的数据,通过聚集索引可以查到需要查找的数据。
非聚集索引:以非主键创建的索引,存储的是主键和索引列,通过非聚集索引可以查找到记录对应的主键值, 再使用主键的值通过聚集索引查找到需要的数据。

也可以分为四小类:
1.普通索引:最基本的索引,没有任何限制。

CREATE INDEX IDX_USER_NAME ON T_USER(USER_NAME(20))

2.唯一索引(UNIQUE) :唯一索引的列值必须唯一,但允许为空值。oracle自动为主键创建唯一索引。

CREATE UNIQUE  INDEX IDX_USER_ID ON T_USER(USER_ID(12))

3.全文索引(FULLTEXT) : 仅可以适用于MyISAM引擎的数据表;作用于CHAR、VARCHAR、TEXT数据类型的列。

CREATE FULLTEXT INDEX IDX_USER_NAME ON T_USER(USER_NAME(20))

4.组合索引:将几个列作为一条索引进行检索,使用最左匹配原则。

CREATE INDEX IDX_USER_AGE ON T_USER(MINAGE,MAXAGE)

索引提高检索速度,降低增删改速度

索引的底层数据结构是B+树,将无序的数据变成有序,提高了检索速度。
建立索引就是建立一棵B+树,B+树是平衡树的一种,对这棵树增删改会破坏它原有的结构,要维持平衡树就必须做额外的工作,加大开销,降低增删改的速度。

除了B+树,还有一种是哈希索引,采用哈希算法,把键值换算成新的哈希值,根据哈希值来定位,速度非常快。
哈希索引的局限:
1.哈希索引也没办法利用索引完成排序
2.不支持最左匹配原则
3.在有大量重复键值情况下,哈希索引的效率也是极低的---->哈希碰撞问题。
4.不支持范围查询

如果存储的数据重复度很低(也就是说基数很大),对该列数据以等值查询为主,没有范围查询、没有排序的时候,特别适合采用哈希索引,通常,B+树索引结构适用于绝大多数场景。

建立索引的原则

1.最左匹配原则:MySQL会一直向右匹配直到遇到范围查询(>,<,BETWEEN,LIKE)就停止匹配。
2.等于(=)和in可以乱序。比如,a = 1 AND b = 2 AND c = 3 建立(a,b,c)索引可以任意顺序,MySQL的查询优化器会帮你优化成索引可以识别的模式。
3.尽量选择区分度高的列作为索引,字段不重复的比率,比率越大扫描的记录数就越少,唯一键的区分度是1。
4.索引列不能参与计算,尽量保持列“干净”。
5。尽可能的扩展索引,不要新建立索引。如表中已经有了a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。
6.单个多列组合索引和多个单列索引的检索查询效果不同,因为在执行SQL时,MySQL只能使用一个索引,会从多个单列索引中选择一个限制最为严格的索引。

猜你喜欢

转载自blog.csdn.net/qq_41372922/article/details/82857177
今日推荐