【Mysql】第十章 索引-重点(主键索引+唯一索引+普通索引+全文索引)
创始人
2024-11-04 19:34:21
0

文章目录

  • 一、概念
        • 使用B+树不用B树和二叉查找树做索引:
        • MyISAM 和 InnoDB 的区别
        • 判断是否使用索引
        • 索引失效的几种情况
  • 二、索引操作
    • 1.主键索引-PRI
    • 2.唯一索引-UNI
    • 3.普通索引-MUL
    • 4.全文索引
    • 5.查询索引
    • 6.删除索引
    • 7.索引创建原则


一、概念

索引会可以提高查询速度,但是会增加大量的IO。数据库服务端本质是一个进程,所以是在内存中,而数据库文件本质是保存在内存当中,对数据操作都是在内存中进行的。

  • B+ 树索引原理是多路平衡查找树,每一次的查询都是从根节点出发,查询到叶子节点获得所查键值,查询判断是否需要回表,查询效率比较稳定,不需要回表.
  • Hash 索引底层就是 Hash 表,进行查询时调用 Hash 函数获取到相应的键值(对应地址),然后回表查询获得实际数据,避免不了回表查询数据.
使用B+树不用B树和二叉查找树做索引:

B+ 树的非叶子结点只存关键字不存数据,单个页可以存储更多的关键字, I/O 读取次数相对就减少,查找效率稳定

MySQL与磁盘交互的基本单位是16KB,叫做page,文件数据是以page为单位保存在磁盘当中,所以进行数据交互需要IO,为提升效率要减少IO的使用。

IO交互使用的是page,不用page查5条数据要调用5次IO,用page只要调用一次IO,之后要查的数据直接在内存中进行,采用的是B+树。

单个page,内部数据会按照主键进行排序

image-20240803143801763

单个Page内创建页内目录

image-20240803143837089

多个Page

image-20240803144029375

Page之上创建页目录

image-20240803144107086

MyISAM 和 InnoDB 的区别
  • InnoDB 支持事务,而 MyISAM 不支持
  • 聚簇索引: 像InnoDB存储引擎这种,将数据记录与索引结构放在一起的索引方案,两个文件,叫做聚簇索引。
  • 非聚簇索引: 像MyISAM存储引擎这种,将数据记录与索引结构分离的索引方案,三个文件,叫做非聚簇索引。
判断是否使用索引

只需在查询语句开头增加 EXPLAIN 这个关键字

索引失效的几种情况
  • like 以%开头,索引无效;当like前缀没有%,后缀有%时,索引有效
  • or 语句前后没有同时使用索引。当 or 左右查询字段只有一个是索引,该索引失效,只有左右查询字段均为索引时,才会生效

二、索引操作

1.主键索引-PRI

  • 一个表中,最多只能有一个主键索引。
  • 主键索引的引用率高。
  • 主键索引的列一般是数字类型。

三种创建方式

//创建表的时候,直接在列名后指定 primary key create table user1( id int primary key,  name varchar(30) ); //创建表的最后,指定某列或某几列为主键索引 create table user2( id int,  name varchar(30),  primary key(id) ); //创建表以后再添加主键 alter table user3 add primary key(id); 

2.唯一索引-UNI

  • 一个表中,可以有多个唯一索引
  • 如果在某一列建立唯一索引,必须保证这列不能有重复数据
  • 如果一个唯一索引上指定not null,等价于主键索引
  • 和普通索引一样
//表定义时,在某列后直接指定unique唯一属性。 create table user4( id int primary key,  name varchar(30) unique ); //创建表时,在表的后面指定某列或某几列为unique create table user5( id int primary key,  name varchar(30),  unique(name) ); //创建表以后再添加唯一键 alter table user6 add unique(name); 

3.普通索引-MUL

  • 一个表中可以有多个普通索引
  • 该列有重复的值,使用普通索引
  • 和唯一索引一样
//在表的定义最后,指定某列为索引 create table user8(id int primary key, name varchar(20), email varchar(30), index(name)  ); //创建完表以后指定某列为普通索引 alter table user9 add index(name);  //创建一个索引名为 idx_name 的索引 create index idx_name on user10(name); 

4.全文索引

存储引擎必须是MyISAM,使用match(列1) against (关键字)

CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), body TEXT,//内容很大 FULLTEXT (title,body) )engine=MyISAM;  select * from articles where match(title,body) against ('database');//查询哪些文章中包含database关键字 

5.查询索引

show index from 表名\G;//加\G是方便看 show keys from 表名\G; desc 表名; 

6.删除索引

alter table 表名 drop primary key;//删除主键索引 alter table 表名 drop index 索引名;//删除非主键索引 

7.索引创建原则

  • 比较频繁作为查询条件的字段应该创建索引。
  • 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件。
  • 更新非常频繁的字段不适合创建索引。
  • 不会出现在where子句中的字段不应该创建索引。

相关内容

热门资讯

ia攻略/牛牛房卡代理九酷大厅... 今 日消息,九酷大厅/随意玩房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更...
我来教你/金花房卡专卖店新超圣... 新超圣房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根据...
正规平台有哪些,牛牛房卡怎么获... 微信游戏中心:青鸟大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
一分钟实测分享”热玩吧房卡怎么... 一分钟实测分享”热玩吧房卡怎么弄“牛牛房卡哪里有卖游戏中心打开微信,添加客服【113857776】,...
一分钟了解“如何购买金花房卡普... 悠悠大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...
IA解析/斗牛房卡充值天道联盟... IA解析/斗牛房卡充值天道联盟/随意玩/房卡怎么买Sa9Ix苹果iPhone 17手机即将进入量产阶...
我来教你/牛牛充值房卡新竹大厅... 今 日消息,新竹大厅房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
玩家攻略”王者大厅房卡“牛牛房... 玩家攻略”王者大厅房卡“牛牛房卡哪里有卖 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客服【11...
推荐一款!牛牛房卡代理天蝎大厅... 微信游戏中心:天蝎大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
重大通报,金花充值房卡星驰娱乐... 星驰娱乐是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
科技实测!金花房卡出售新二号/... 您好!微信新二号大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(新二号)大厅介绍:咨询...
终于找到“微信斗牛房卡如何购买... 微信斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来...
重大通报,金花房卡是正规的新道... 今 日消息,新道游/新皇豪房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新...
一秒了解”百万牛房卡获取“哪里... 房卡获取是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:113857776许多玩家在游戏中会购买房卡...
我来教你/斗牛房间怎么创建的南... 南瓜大厅/新道游房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 ...
重大通报,牛牛房卡制作链接新众... 微信游戏中心:新众亿/皇豪互娱房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或...
ia实测“微信链接斗牛房卡多少... 斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡来享受...
正版授权!金花房卡专卖店鲨鱼众... 您好!微信鲨鱼众娱大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(鲨鱼众娱)大厅介绍:...
实测分享”辣椒互娱房卡详细充值... 实测分享”辣椒互娱房卡详细充值“牛牛房卡批发平台游戏中心打开微信,添加客服【113857776】,进...
IA解析/牛牛房卡怎么获得天酷... 天酷大厅房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...