Mysql索引

什么是索引?

官方定义:索引是一种帮助mysql提高查询的数据结构

索引缺点:索引需要耗费数据资源,索引需要占用磁盘空间,当对表的数据进行增删改的时候,速度会受到影响。(删除修改增加/一个元素可能会对底层数据结构进行重排序)

索引分类:

主键索引:设定为主键后数据会自动建立索引,innodb为聚簇索引,主键索引列值不能为空

单列索引:即一个索引包含单个列,一个表可以有多个单列索引

唯一索引:索引列的值必须唯一,但允许有空值,只能有一个

复合索引:即一个索引包含多个列

主键索引:主键索引在建表的时候自动创建,在主流数据库当你为字段定义 primary key 时,都会自动创建对应的主键索引

  • 如果表中存在一个 NOT NULLUNIQUE 的字段,InnoDB 会使用该字段作为聚簇索引。

自动生成隐藏主键列(ROW_ID)

  • 如果没有主键,也没有合适的唯一索引,InnoDB 会自动生成一个隐藏列 ROW_ID,作为聚簇索引。
create table t_user(
id varchar(32) primary key ,
name varchar(32)
);

查看索引:

show index from t_user ;

普通索引创建有两种方式:

一种是建表的时候,另一种是建表之后进行创建

建表后这样创建:
create index index_name on t_user(name);

在show index from t_user 现在就有两个索引

还可以这样:alter table t_user add column age int, add index index_age(age);

建表时创建索引:

create table t_user( id varchar(20) primary key,name varchar(20) ,ley (name)); //这里就为name字段自动创建一个索引,索引名称不可指定

唯一索引:

建表的时候创建

create table t_user(id varchar(32) primary key ,name varchar(32),unique(name) )

建表后创建唯一索引:

create index unique nameindex on t_user(name);

删除索引: drop index nameindex on t_user

复合索引:

复合索引中的字段顺序绝对不是随便填的,它对查询性能和索引是否能被有效使用有非常关键的影响。

复合索引:

建表时创建:

create table t_user(id varchar(20) peimary key ,name varchar(32) ,age int, key(name ,age));

建表后创建:create index nameageindex on t_user(name,age);

索引底层原理:

这个表在创建的时候定义主键是primary key ,默认有一个主键索引

B树和B+树的主要区别在于数据存储位置和查询效率:B树的所有节点都存储数据,而B+树只有叶子节点存储数据,非叶子节点仅用于索引。

索引的数据结构是一个B+树,我们在放入数据的时候他会基于数据进行一个排序,之后会将数据以链表指针的形式链接起来,

聚簇索引和非聚簇索引:

聚簇索引:将数据存储和索引放到了一块,索引结构的叶子节点保存了行数据

非聚簇索引:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置!

非聚簇索引优势:

博客内容均系原创,未经允许严禁转载!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇