索引:
索引就是一种数据结构,创建一种数据结构来提高查询的效率。
其中,两种常用的存储引擎MyISAM和INnoDB都是依靠B+树来实现的。但是底层的细节却不相同:
MyISAM:
B+树:数据和索引分离(数据在表中存储,在树中存储的是索引值,通过索引值找到相应的位置,然后通过叶子节点上的地址找到数据在表中的位置就可以了,叶子节点上并不直接存储其他的信息,这就是分离)
INnoDB:
B+树:数据当成索引的一部分存储(通过索引值找到相应的叶子节点,在叶子节点下面存储的直接就是相关信息,而不是地址值,这就是当成一部分存储,没有分离)
索引:是否存在索引,如果存在某种数据结构,即存在索引;如果是顺序遍历,时间复杂度是O(n)那么就不存在索引,可以说是索引的目的就是为了减少时间、提高效率的。
1.MyISAM和INnoDB索引结构:
MyISAM主索引:索引值 不重复的 索引都可以称之为主索引,叶子节点上存储的是地址
MyISAM辅助索引:索引值 允许数据重复。叶子节点上存储的也是地址,所以说通过MyISAM辅助查询只需要一次就可以完成,不同于INnoDB的两次。
INnoDB主索引:存储数据的索引,主索引中存储的是数据,因为在INnoDB中数据和索引不分离,所以说在叶子节点上存储的是数据。
INnoDB辅助索引:其他的都是辅助索引,和主索引不同,辅助索引叶子节点上存储的是主索引值。然后找到主索引中的索引值的位置,再输出相应的信息。
辅助索引遍历的时候需要两次操作。
2.索引的优化
哪些情况下应该建立索引?
1.查询多
2.主键、外键
3.用于连接两个表的字段
4.经常需要排序的字段,需要排序的话用BST树再好不过
5.经常用于范围查询
哪些情况下不应该建立索引?
1.查询少
2.数值少,比如说性别
3.数值多 文章内容text(大文本字段) B+树的结构会变得很大,占用率就会很大
4.修改 的操作大于 查询 的操作的时候 | 建立索引的目的是为了提高查询效率
3.索引的分类和创建
普通索引
1.直接创建索引
create index index_name on table_name(column_name);
2.见表时指定索引
create table table_name()engine = index_name;
3.修改添加索引
alter table table_name add index index_name on colnmn_name;
主键索引————在index前面添加primary就可以了
唯一索引————在index前面添加unique就可以了
全文索引
组合索引————表中的多个属性列结合起来构成的一个索引
(组合索引中的)最左前缀原则:(用例说明)–>
例如 title表
id author time gaiyao content
此时id和time构成一个组合索引,那么
select * from title where id = xx;索引查询
select * from title where time = xx;非索引查询
select * from title where tid = xx && time = xx;索引查询
这就是最左前缀原则
4.索引的注意事项(后期补齐)