Mysql索引

目录

1.什么是索引

2.索引分类

InnoDB

a.主键索引

b.单值索引 单列索引 普通索引

c.唯一索引

d.复合索引

MyISAM

e.Full Text 全文索引(My5.7版本之前,只能用于MYISAM引擎)

3.索引的基本操作

1.主键索引 自动创建

建表 主键自动创建主键索引

查看索引

2.单列索引(普通索引|单值索引) 创建两种方式 :

建表时创建

建表后创建

3.唯一索引

建表时创建

建表后创建

4.复合索引

建表时创建

建表后创建

4.索引的底层原理 index

1.插入id无序数据

2.查询后,发现id是有序的:

3.为什么上面数据明明没有按顺序插入,为什么查询时却是有序的呢?

4.为了进一步提高效率,MySQL索引又进行了优化

5.上面这种索引结构称之为B+树数据结构,那么什么是B+树呢

6.B树


1.什么是索引

官方定义:一种帮助MySQL提高查询效率的数据结构

索引的优点:

1.大大加快数据查询速度

索引的缺点:

1.维护索引需要消耗数据库资源

2.索引需要占用磁盘空间

3.当对表的数据进行增删改的时候,因为要维护索引,速度会受到影响。

2.索引分类

从数据结构角度上,可以分为B+tree索引,hash索引,fulltext索引(InnoDB,MyISAM都支持)

存储角度分为聚簇索引和非聚簇索引

逻辑角度上可以为primary key(主键索引) ,唯一索引, 单列,复合和Full Text 全文索引

InnoDB

a.主键索引

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

b.单值索引 单列索引 普通索引

即一个索引只包含单个列,一个表可以有多个单例索引 id name index age index bir

c.唯一索引

索引列的值必须唯一,但允许有空值 唯一索引,索引列值可以存在null,但是只能存在一个null

d.复合索引

即一个索引包含多个列 id (name age) index bir

MyISAM

e.Full Text 全文索引(My5.7版本之前,只能用于MYISAM引擎)

全文索引类型为FULL TEXT,在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引可以在CHAR,VARCHAR,TEXT类型列上创建。MYSQL只有MYISAM存储引擎支持全文索引。

3.索引的基本操作

1.主键索引 自动创建

建表 主键自动创建主键索引

CREATE TABLE t_user(id VARCHAR(20) PRIMARY KEY,name VARCHAR(20));

查看索引

show index from t_user

2.单列索引(普通索引|单值索引) 创建两种方式 :

建表时创建

create table t_user1(id varchar(20) primary key , name varchar(20) , key(name));

建表后创建

create index name_index on t_user(name);

3.唯一索引

建表时创建

create table t_user2(id varchar(20) primary key , name varchar(20) , UNIQUE(name));

建表后创建

CREATE unique index name_index on t_user2(name);

4.复合索引

建表时创建

CREATE TABLE t_user3(id VARCHAR(20) PRIMARY KEY,name VARCHAR(20),age INT,KEY(name,age));

1.最左前缀原则

定义:符合左前缀的顺序,才可以利用符合索引

eg: name age bir

name 可以利用索引

name age 可以利用索引

name age bir 可以利用索引

2.mysql引擎在查询为了更好利用索引,在查询过程中会动态调整查询字段顺序,以便利用索引

能否利用索引

name bir age 能

name age bir 能

age bir 否

bir age name 能

建表后创建

CREATE INDEX name_age_index ON t_user3(name,age);

4.索引的底层原理 index

1.插入id无序数据

CREATE TABLE t_emp(id int PRIMARY KEY,name VARCHAR(20), age int);

INSERT INTO t_emp VALUES(5,'d',22);
INSERT INTO t_emp VALUES(6,'d',22);
INSERT INTO t_emp VALUES(7,'e',21);
INSERT INTO t_emp VALUES(1,'a',23);
INSERT INTO t_emp VALUES(2,'b',26);
INSERT INTO t_emp VALUES(3,'c',27);
INSERT INTO t_emp VALUES(4,'a',32);
INSERT INTO t_emp VALUES(8,'f',53);
INSERT INTO t_emp VALUES(9,'v',13);

2.查询后,发现id是有序的:

3.为什么上面数据明明没有按顺序插入,为什么查询时却是有序的呢?

原因:

mysql底层为主键自动创建索引,主键索引进行排序

为什么要排序呢?

因为排序后查询就相对较快了。如查询id = 34,只需要按照顺序查找到34就可以了。如果没有排序,就像大海捞针

4.为了进一步提高效率,MySQL索引又进行了优化

就是基于页面形式进行管理索引

如查询id =3 4,直接先比较页,先去页目录找,再去数据目录找

5.上面这种索引结构称之为B+树数据结构,那么什么是B+树呢

8位(bit)=1字节(Byte),1024字节=1KB

CREATE TABLE t_emp(id int PRIMARY KEY,name VARCHAR(20), age int);

page:

4(int)+20+4+8(指针)=36字节

16*1024/36=455 条数据 (主键+内容+指针)

页目录:

4(int)+8(指针)=12字节

16*1024/12=1365 条数据(主键+指针)

1365*1365*455 = 847974400 3层数可以存的数据条数

6.B树

 

  • 27
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 57
    评论
MySQL索引是一种数据结构,可以帮助MySQL快速定位和访问表中的数据。使用索引可以提高查询效率,降低数据库的负载。下面是MySQL索引的一些基本概念和使用方法: 1. 索引类型 MySQL支持多种类型的索引,包括B树索引、哈希索引、全文索引等。其中,B树索引是最常用的一种,也是默认的索引类型。B树索引可以用于精确匹配和范围查询,而哈希索引主要用于等值查询,全文索引则用于文本检索。 2. 索引创建 可以在创建表时指定索引,例如: ``` CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(50), INDEX idx_email (email) ); ``` 也可以在已有的表上添加索引,例如: ``` ALTER TABLE users ADD INDEX idx_name (name); ``` 3. 索引使用 查询语句中可以使用WHERE子句和ORDER BY子句来利用索引,例如: ``` SELECT * FROM users WHERE email = 'example@example.com'; SELECT * FROM users WHERE name LIKE 'John%' ORDER BY id DESC; ``` 需要注意的是,索引并不是越多越好,过多的索引会占用过多的磁盘空间并降低写操作的性能。因此,需要根据实际情况选择合适的索引。同时,还需要定期对索引进行维护,包括优化查询语句、删除不必要的索引等。 4. 索引优化 MySQL提供了一些工具来优化索引,例如EXPLAIN命令可以帮助分析查询语句的执行计划,找出慢查询和不必要的全表扫描。可以使用OPTIMIZE TABLE命令来优化表的索引和碎片,从而提高查询性能。还可以使用缓存来避免频繁的查询操作,例如使用Memcached或Redis等缓存工具。 以上就是MySQL索引的一些基本概念和使用方法,需要根据实际情况进行选择和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 57
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值