MySQL数据库之索引

目录

一、索引的概念

二、索引的作用

三、索引的副作用

四、创建索引的规则

1、适合创建为索引的字段的规则

2、MySQL的优化 哪些字段/场景适合创建索引,哪些不适合

五、索引的分类和创建

1、索引的分类

2、三种创建方式

3、索引的创建演示

1、创建普通索引

(1)直接创建索引

 (2)通过修改表结构创建索引

(3)通过创建表的方法创建普通索引

2、唯一索引

(1)直接创建唯一索引

(2)创建表的时候创建唯一索引

 (3)通过修改表结构创建唯一索引

3、主键索引

(1)创建主键索引

(2)通过修改表结构添加主键索引

4、组合索引

 (1)创建组合索引

5、全文索引 

(1)创建表的时候创建全文索引

 (2)直接创建全文索引

(3)修改表结构方式创建

6、查看索引

方法一

 方法二

7、删除索引

方法一:直接删除

方法二:通过修改表的方式删除索引

 方法三:删除主键索引


一、索引的概念

索引是一个排序的列表,再这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。

使用索引进行操作和使用select等语句直接进行查询的区别:使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址直接访问相应的数据,因此能加快数据库的查询速度。但是其他操作语句需要扫描全表后再进行相应操作。

总结:索引就是一种帮助系统能更快速的查询信息的结构,可以通过物理地址直接进行查找,而不需要扫描全表再进行操作。

二、索引的作用

(1)设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询速度,这是创建           索引的最主要的原因。

(2)当表很大或查询涉及到多个表时,使用索引可以成千上万倍地提高查询速度。

(3)可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本。

(4)通过创建唯一(键)性索引,可以保证数据表中每一行数据的唯一性。

(5)可以加快表与表之间的连接。

(6)在使用分组和排序时,可大大减少分组和排序的时间。

三、索引的副作用

(1)索引需要占用额外的磁盘空间

        对于 MyISAM 引擎而言,索引文件和数据文件是分离的,索引文件用于保存数据记录的地址。
而 InnoDB 引擎的表数据文件本身就是索引文件。

(2)在插入和修改数据时要花费更多的时间,因为索引也要随之变动

四、创建索引的规则

1、适合创建为索引的字段的规则

索引虽可以提升数据库查询的速度,但并不是任何情况下都适合创建索引。因为索引本身会消耗系统资源,在有索引的情况下,数据库会先进行索引查询,然后定位到具体的数据行,如果索引使用不当,反而会增加数据库的负担。

(1)表的主键、外键必须有索引。因为主键具有唯一性,外键关联的是子表的主键,查询时可以快速定位

(2)记录数超过300行的表应该有索引。如果没有索引,需要把表遍历一遍,会严重影响数据库的性能。

(3)经常与其他表进行连接的表,在连接字段上应该建立索引。

(4)唯一性太差的字段不适合建立索引。

(5)更新太频繁地字段不适合创建索引。

(6)经常出现在 where 子句中的字段,特别是大表的字段,应该建立索引。
select name,score from ky19 where id=1

(7)索引应该建在选择性高的字段上。

(8)索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引。
id type score zhusang(txt)  page  blog

2、MySQL的优化 哪些字段/场景适合创建索引,哪些不适合

(1)小字段

(2)唯一性强的字段

(3)更新不频繁,但查询率很高的字段

(4)表记录超过300+行

(5)主键、外键、唯一键

五、索引的分类和创建

1、索引的分类

(1)普通索引

针对所有字段,没有特殊的需求和规则

(2)唯一索引

针对唯一的字段,仅允许出现一次空值

(3)组合索引

以 多列/多字段 组合的形式的索引,按照排序的顺序,否则无效

(4)主键索引

针对唯一字段,且不可为空,同时一张表只允许包含一个主键索引

(5)全文索引

varchar char text blog clob 以这些字段检索内部信息来做字段的索引

2、三种创建方式

(1)创建索引并且指向索引的字段

(2)alter修改表结构的时候添加add 添加index

(3)创建表的时直接创建索引

ps:主键索引--->直接创建主键即可

3、索引的创建演示

1、创建普通索引

(1)直接创建索引
格式:
CREATE INDEX 索引名 ON 表名 (列名[(length)]);示例:
create index phone_index on yyy (phone);#(列名(length)):length是可选项。如果忽略 length 的值,则使用整个列的值作为索引。如果指定使用列前的 length 个字符来创建索引,这样有利于减小索引文件的大小。
#索引名建议以“_index”结尾,可以自定义。

 (2)通过修改表结构创建索引
格式:
CREATE TABLE 表名 ( 字段1 数据类型,字段2 数据类型[,...],INDEX 索引名 (列名));示例:
create table test(id int(4) not null,name varchar(10) not null,cardid varchar(18) not null,index id_index (id));
show create table test;    #查看表结构

(3)通过创建表的方法创建普通索引
格式:
CREATE TABLE 表名 ( 字段1 数据类型,字段2 数据类型[,...],INDEX 索引名 (列名));示例:
create table test(id int(4) not null,name varchar(10) not null,cardid varchar(18) not null,index id_index (id));
show create table test;

 

2、唯一索引

(1)直接创建唯一索引
格式:
CREATE UNIQUE INDEX 索引名 ON 表名(列名);示例:
create unique index address_index on yyy (address);
create unique index name_index on yyy (name);                        
show create table yyy;

 

(2)创建表的时候创建唯一索引
格式:
CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...],UNIQUE 索引名 (列名));示例:
create table amd2 (id int,name varchar(20),unique id_index (id));
show creat table amd2;

 (3)通过修改表结构创建唯一索引
格式:
ALTER TABLE 表名 ADD UNIQUE 索引名 (列名);示例:
alter table yyy add unique cardid_index (cardid);

3、主键索引

(1)创建主键索引
格式:
CREATE TABLE 表名 ([...],PRIMARY KEY (列名));示例:
create table test1 (id int primary key,name varchar(20));
create table test2 (id int,name varchar(20),primary key (id));
show create table test1;
show create table test2;

(2)通过修改表结构添加主键索引
格式:
ALTER TABLE 表名 ADD PRIMARY KEY (列名); 示例:
alter table yyy add primary key(name);

4、组合索引

 (1)创建组合索引
格式:
CREATE TABLE 表名 (列名1 数据类型,列名2 数据类型,列名3 数据类型,INDEX 索引名 (列名1,列名2,列名3));示例:
create table amd1 (id int not null,name varchar(20),cardid varchar(20),index index_amd (id,name));
show create table amd1;
insert into amd1 values(1,'zhangsan','123123');
insert into amd1 values(1,'zhangsan','123123');

5、全文索引 

(1)创建表的时候创建全文索引
格式:
CREATE TABLE 表名 (字段1 数据类型[,...],FULLTEXT 索引名 (列名)); 示例:
create table auth2.test14(uid int(5) not null.uname char(5) not null,major char(10) not null,grade int(2) not null,score decimal(5,2) not null,addition char(10) default '无',fulltext index fen(uname),primary key(uid));

 (2)直接创建全文索引
格式:
CREATE FULLTEXT INDEX 索引名 ON 表名 (列名);示例:
create fulltext index remark_index on member (remark);

(3)修改表结构方式创建
格式:
ALTER TABLE 表名 ADD FULLTEXT 索引名 (列名);示例:
alter table ky30 add fulltext xingming(name);

6、查看索引

方法一
格式:
show index from 表名;
show index from 表名\G;    #竖向显示表索引信息示例:
show index from yyy;
show index from yyy\G;    #竖向显示表索引信息

 方法二
格式:
show keys from 表名;
show keys from\G 表名;    #竖向显示索引信息示例:
show keys from yyy;
show keys from yyy\G;    #竖向显示索引信息

7、删除索引

方法一:直接删除
格式:
DROP INDEX 索引名 ON 表名;示例:
drop index name_index on member;

方法二:通过修改表的方式删除索引
格式:
ALTER TABLE 表名 DROP INDEX 索引名;示例:
alter table member drop index id_index;
show index from member;

 

 方法三:删除主键索引
格式:
ALTER TABLE 表名 DROP PRIMARY KEY;示例:
alter table yyy drop primary key;

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/86788.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年Android应用开发的6大框架

2024年Android应用开发的6大Framwork 2024年Android应用开发的6大框架,影响移动应用开发领域,改变应用的创建和用户使用方式。随着移动应用市场不断发展,对灵活和高效框架的需求也在增加。这些框架为开发人员提供资源和工具,构建…

【力扣每日一题】2023.8.27 合并区间

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 那么合并区间是在什么情况下才能合并呢? 我总结为两种情况 第一种情况就是这样,第二个区间的左区间大于第一个区…

【java】【idea2023版】Springboot模块没有.iml文件的问题

目录 方法一: 1、首先鼠标选中对应的对应的模块 ,按两下Ctrl键 2、project中选择对应的模块 3、运行mvn idea:module 命令​编辑 方法二: 1、可以右键点击open Terminal 2、然后在打开的Terminal里输入 方法一: 1、首先鼠…

实用调试技巧(1)

文章目录 目录1. 什么是bug?2. 调试是什么?有多重要?2.1 调试是什么?2.2 调试的基本步骤2.3 Debug和Release的介绍 3. Windows环境调试介绍3.1 调试环境的准备3.2 学会快捷键3.3 调试的时候查看程序当前信息3.3.1 查看临时变量的值…

从零开始探索C语言(二)----变量、常量和存储类

文章目录 1. C 变量1.1 C 中的变量定义1.2 变量初始化1.3 变量不初始化1.4 C 中的变量声明1.5 C 中的左值和右值 2. C 常量2.1 整数常量2.2 浮点常量2.3 字符常量2.4 字符串常量2.5 定义常量2.6 #define 与 const 区别 3. C 存储类3.1 auto 存储类3.2 register 存储类3.3 stati…

用 PHP 和 JavaScript 显示地球卫星照片

向日葵 8 号气象卫星是日本宇宙航空研究开发机构设计制造的向日葵系列卫星之一,重约 3500 公斤,设计寿命 15 年以上。该卫星于 2014 年 10 月 7 日由 H2A 火箭搭载发射成功,主要用于监测暴雨云团、台风动向以及持续喷发活动的火山等防灾领域。…

【C++入门】new和delete(C/C++内存管理)

目录 1.C/C内存分布2.C语言中动态内存管理方式3.C内存管理方式3.1new/delete操作内置类型3.2new和delete操作自定义类型 4.operator new与operator delete函数5.new和delete的实现原理5.1内置类型5.2自定义类型 6.malloc/free和new/delete的区别7.定位new表达式(了解…

机器学习十大算法之七——随机森林

0 引言 集成学习(ensemble learning)是时下非常流行的机器学习算法,它本身不是一个单独的机器学习算法,而是通过在数据上构建多个横型,集成所有模型的建模结果,基本上所有的机器学习领域都可以看到集成学习…

几个nlp的小任务(多选问答)

@TOC 安装库 多选问答介绍 定义参数、导入加载函数 缓存数据集 随机选择一些数据展示 进行数据预处理部分(tokenizer) 调用t

校园安全Ai视频分析预警算法

校园安全Ai视频分析预警算法通过yolov5python深度学习算法网络模型,校园安全Ai视频分析预警算法对学生的行为进行智能监测和预警如识别学生打架斗殴、抽烟、翻墙、倒地以及异常聚集等行为,及时发出预警通知。YOLO的结构非常简单,就是单纯的卷…

在线图片怎么转换成PDF?在线图片转换成PDF步骤介绍

文件格式要转化不知道怎么办?想要网上下载文件格式转换软件,但是却不知道下载哪个好?今天小编小编就给大家分享一下靠谱的小圆象PDF转换器工具,想知道这款软件好不好用?在线图片怎么转换成PDF?那就进来看看吧。 在线图片怎么转换成PDF 小圆象PDF转换…

maven 从官网下载指定版本

1. 进入官网下载页面 Maven – Download Apache Maven 点击下图所示链接 2. 进入文件页,选择需要的版本 3. 选binaries 4. 选文件,下载即可