索引简单入门

索引定义:

索引是 排好序快速查找的数据结构 简单来说索引会影响order by 和 where 后面
目的是提高查找效率 (排序+查找)
底层是B+树 一文件的形式存储再磁盘上

显示表的索引
show index from tableName;
显示当前DBMS的默认存储引擎
show variables like %strage_egines%

索引的优势

1.提高查找效率
2.降低数据库IO成本
3.索引排序降低数据的排序成本
4.降低CPU的消耗

索引劣势

1.索引占磁盘空间
2.增大查询效率但是降低更新表的速率 因为增删改不仅是再操作字段
还要操作相应的索引列
相当于把三楼的书换成武侠小说 同时也要把图书馆目录改了

索引的分类:

单值索引:一个索引只包含单个列
唯一索引:
复合索引:
唯一索引与主键索引的比较
主健也可多个字段的组合,如果你在主键的其中一个字段建唯一索引就只能是一个字段。

单值索引
create index 索引名 on 表名 (字段);
复合索引
create index 索引名 on 表名 (字段1 ..... 字段n);
唯一索引
create unique index 索引名 on 表名(字段)
单值索引
alter tabele 表名 add index 索引名(字段)
唯一索引
alter table 表名 add unique index 索引名(字段)
复合索引
alter table 表名 add index 索引名(字段1...字段n)

索引属于DDL语句不需要提交
索引简单入门_第1张图片
索引简单入门_第2张图片

那些情况适合建索引?

索引简单入门_第3张图片

那些情况不适合建索引?

  • 1.表记录太少
  • 2.经常增删改或者更新的字段
  • 3.数据库当中字段下的值 数据重复而且平均 比如性别就是男女
    就不会涉及到很麻烦的排序和查询 就不用建索引
    如果字段下的值都大量的不同 或者 大量的差异就应该用对当前列建索引
    这样索引选择性高 效率高
什么时候索引会失效

以“%”开头的LIKE语句,模糊匹配
OR语句前后没有同时使用索引
数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型)

Mysql 索引底层数据结构是B+树

比B 树好在 他是存在叶子节点 是矮胖的 查询次数少
因为都是同层次的所以查找谁都要查到叶子结点 叶子节点之间又用链表链接又是有序的
B+树的路途都关键字而且是一种范围的形式 关键字也在不断重复 告诉你他旗下的节点的范围

B树的路途都是存在索引的节点 关键字不会重复 但是因为节点就是索引所以会有重复的查询 查找效率低
相比HASH索引
HASH索引不能查找范围 然后模糊查询不可以 因为是HASH所以也会产生HASH碰撞等问题
B B+的区别
HASH 和B+的区别

HASH B+

你可能感兴趣的:(5.数据库)