【MySQL】3.1MySQL索引的介绍

目录

一、索引的概念

数据库索引

索引的作用

索引的副作用

索引创建的原则(应用场景)

适合建立索引

二、索引的分类和创建

1.普通索引

创建普通索引

1.1直接创建

1.2修改表结构的方式创建普通索引

1.3创建表时创建普通索引

2.唯一索引

2.1直接创建唯一索引

2.2修改表结构的方式创建唯一索引

2.3创建表时创建唯一索引

3.主键索引

3.1修改表结构的方式创建主键索引

3.2创建表时创建主键索引

4.组合索引

4.1创建表时创建组合索引

5.全文索引

直接创建全文索引

修改表结构的方式创建全文索引

创建表时创建全文索引

使用全文索引查询

三、查看索引

各字段的含义

四、删除索引

直接删除索引

修改表的方式删除索引

删除主键索引

小结

创建索引

使用全文索引查询

查看索引

各字段的含义

删除索引

★★★


一、索引的概念

当并发量大且频繁时,可以做一个索引来减轻服务器负担(避免全局扫描)
索引相当于书籍的目录,能够帮助系统快速查找到想要的数据

数据库索引

        是一个排序的列表,存储着索引值和这个值所对应的物理地址
        无须对整个表进行扫描,通过物理地址就可以找到先要
        是表中一列或者若干列值的排序方法
        需要额外的磁盘空间来存储索引

索引的作用

当表的数据很多,或涉及到多个表时使用

        利用各种快速定位技术,能大大加快数据库的查询速度
        当表很大或查询涉及到多个表时,可以成千上万倍提高查询速度
        可以减低数据库的IO成本,和数据库的排序成本
        通过创建 唯一性 索引保证数据表中数据的唯一性
        在使用分组和排序时,可以大大减少分组和排序的时间

索引的副作用

        索引需要占用额外的磁盘空间
        在插入和修改数据时需要花费更多时间;因为数据更改时,索引也要随之变动

索引创建的原则(应用场景)

表的主键、外键必须有索引
记录的数据超过2万行的表应该有索引;没有索引的话,查询时就会把表遍历一遍,会严重影响数据库性能
经常与其他表进行连接的表,在连接字段上应该建立索引
经常出现在where子句中的字段,特别是大表字段,应该建立索引
    select 字段1,字段2 from 表名 where 字段x='';
索引应该建在选择性高的字段上

唯一性太差的字段不适合建立索引
更新太频繁的字段也不适合建立索引
索引应该建在小字段上,对于大的文本字段甚至超长字段不要建立索引
适合建立索引

1.小字段
2.唯一性强的字段
3.更新不频繁,单查询率高的字段
4.表记录超过2万
5.主键、外键、唯一键

二、索引的分类和创建

1.普通索引

最基本的索引;没有约束,能加快访问速度

创建普通索引
1.1直接创建
create index 索引名 on 表名(列名);
create index 索引名 on 表名(列名(length));

#(列名(length)):length是可选项。如果忽略 length 的值,则使用整个列的值作为索引。如果指定使用列前的 length 个字符来创建索引,这样有利于减小索引文件的大小。
#索引名建议以“_index”结尾

create index phone_index on test(phone);

1.2修改表结构的方式创建普通索引
alter table 表名 add index 索引名 (列名);
alter table test add index id_index (id);

1.3创建表时创建普通索引
create table 表名 (字段1,字段2,...,index 索引名(列名));
create table class (id int(3),name char(20),score decimal(5,2),index name_index(name));

2.唯一索引

与普通索引类似,但唯一索引列的值是唯一的

2.1直接创建唯一索引
create unique index 索引名 on 表名(列名);
create unique index phone_index on test(phone);

2.2修改表结构的方式创建唯一索引
alter table 表名 add unique 索引名 (列名);
alter table test add unique id_index (id);

2.3创建表时创建唯一索引
create table 表名 (字段1,字段2,...,unique 索引名 (列名));
create table class (id int,name char(10),score decimal(5,2),unique name_index(name));

3.主键索引

主键索引是一种特殊的唯一索引,必须指定为 "primary key"
一个表只能有一个主键,且不允许为空值;添加主键将自动创建主键索引

3.1修改表结构的方式创建主键索引
alter table 表名 add primary key(列名);
alter table test add primary key(id);

3.2创建表时创建主键索引
create table 表名 (字段1,字段2,...,primary key(列名));
create table class (id int,name char(10),score decimal(5,2),primary key(name));

4.组合索引

可以是单列上创建的索引,也可以是多列上创建的索引;需要满足最左原则,因为select语句的 where条件是依次从左往右执行的,所以在使用select 语句查询时where条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。

4.1创建表时创建组合索引
create table 表名 (列名1,列名2,...,index 索引名(列名1,列名2,列名3));
create table class (id int,name char(10),scorc decimal(5,2),phone int(11),index sum_index(id,name,phone));

​​​​​​​

5.全文索引

直接创建全文索引
create fulltext index 索引名 on 表名(列名);
create fulltext index full_index on test(address);

修改表结构的方式创建全文索引
alter table 表名 add fulltext 索引名 (列名);
alter table test add fulltext name_index(name);

创建表时创建全文索引
create table 表名 (列名1,列名2,...,fulltext 索引名(列名));
create table class (id int,name char(10),scorc decimal(5,2),phone int(11),fulltext name_index(name));

​​​​​​​

使用全文索引查询
select * from 表名 where match(列名) against('查询内容');
select * from test where match(name) against('lisi');

三、查看索引

show index from 表名;
show index from 表名\G;    #竖向显示表索引信息

show keys from 表名;
show keys from 表名\G;     #竖向显示表索引信息

各字段的含义

Table	    表的名称
Non_unique	如果索引内容唯一,则为 0;如果可以不唯一,则为 1。
Key_name	索引的名称。
Seq_in_index	索引中的列序号,从 1 开始。 limit 2,3
Column_name	    列名称。
Collation	    列以什么方式存储在索引中。在 MySQL 中,有值‘A’(升序)或 NULL(无分类)。
Cardinality	    索引中唯一值数目的估计值。
Sub_part	    如果列只是被部分地编入索引,则为被编入索引的字符的数目(zhangsan)。
                如果整列被编入索引,则为 NULL 
Packed	    指示关键字如何被压缩。如果没有被压缩,则为 NULL。
Null	    如果列含有 NULL,则含有 YES。如果没有,则该列含有 NO。
Index_type	用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。
Comment	    备注。

四、删除索引

直接删除索引

drop index 索引名 on 表名;
drop index sum_index on test;

修改表的方式删除索引

alter table 表名 drop index 索引名;

删除主键索引

alter table 表名 drop primary key;

小结

创建索引

创建普通索引
create index 索引名 on 表名(列名);
create index 索引名 on 表名(列名(length));
alter table 表名 add index 索引名 (列名);
create table 表名 (字段1,字段2,...,index 索引名(列名));

创建唯一索引
create unique index 索引名 on 表名(列名);
alter table 表名 add unique 索引名 (列名);
create table 表名 (字段1,字段2,...,unique 索引名 (列名));

创建主键索引
alter table 表名 add primary key(列名);
create table 表名 (字段1,字段2,...,primary key(列名));

创建组合索引
create table 表名 (列名1,列名2,...,index 索引名(列名1,列名2,列名3));

创建全文索引
create fulltext index 索引名 on 表名(列名);
alter table 表名 add fulltext 索引名 (列名);
create table 表名 (列名1,列名2,...,fulltext 索引名(列名));
使用全文索引查询
select * from 表名 where match(列名) against('查询内容');

查看索引

show index from 表名;
show index from 表名\G;    #竖向显示表索引信息

show keys from 表名;
show keys from 表名\G;     #竖向显示表索引信息
各字段的含义
Table	    表的名称
Non_unique	如果索引内容唯一,则为 0;如果可以不唯一,则为 1。
Key_name	索引的名称。
Seq_in_index	索引中的列序号,从 1 开始。 limit 2,3
Column_name	    列名称。
Collation	    列以什么方式存储在索引中。在 MySQL 中,有值‘A’(升序)或 NULL(无分类)。
Cardinality	    索引中唯一值数目的估计值。
Sub_part	    如果列只是被部分地编入索引,则为被编入索引的字符的数目(zhangsan)。
                如果整列被编入索引,则为 NULL 
Packed	    指示关键字如何被压缩。如果没有被压缩,则为 NULL。
Null	    如果列含有 NULL,则含有 YES。如果没有,则该列含有 NO。
Index_type	用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。
Comment	    备注。

删除索引

drop index 索引名 on 表名;
alter table 表名 drop index 索引名;
alter table 表名 drop primary key;

★★★​​​​​​​

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在Android设备上运行深度网络

返回:OpenCV系列文章目录(持续更新中......) 上一篇: 下一篇: 介绍 在本教程中,您将了解如何使用 OpenCV 深度学习模块在 Android 设备上运行深度学习网络。教程是为 Android Studio 2022.2.1 编写的。…

实时数仓之实时数仓架构(Doris)

目前比较流行的实时数仓架构有两类,其中一类是以Flink+Doris为核心的实时数仓架构方案;另一类是以湖仓一体架构为核心的实时数仓架构方案。本文针对Flink+Doris架构进行介绍,这套架构的特点是组件涉及相对较少,架构简单,实时性更高,且易于Lambda架构实现,Doris本身可以支…

c++编写菱形图和计算100~200之间的素数

c编写菱形图 #include <stdio.h> int main() {int i,j,k,n;printf("请输入n:\n");scanf("%d",&n);for(i1;i<n;i){for(k1;k<n-i;k)printf(" ");for(j1;j<2*i-1;j)printf("*");printf("\n");}for(i1;i<…

【Charles如何对手机APP进行抓包和弱网测试】

一、Charles对APP抓包 1、前提条件&#xff1a; 1&#xff09;电脑上必须安装Charles工具&#xff0c;如没有安装可参考&#xff1a;【Charles抓包工具下载安装详细操作步骤】-CSDN博客 2&#xff09;手机和电脑必须在同一个局域网内&#xff08;连接同一个WiFi&#xff09;…

【java多线程】线程基础知识笔记

目录 1、多线程介绍 2、线程 3、线程的调度 4、线程的生命周期 5、线程的并行与并发 6、程的同步与异步 1、多线程介绍 多线程&#xff1a;指的是这个程序&#xff08;一个进程&#xff09;运行时产生了不止一个线程&#xff0c;是Java语言的重要特性&#xff0c;大量应用于…

[Linux开发工具]——gcc/g++的使用

Linux编译器——gcc/g的使用 一、快速认识gcc/g二、程序的翻译过程2.1 预处理&#xff08;.i文件&#xff09;2.2 编译&#xff08;.s文件&#xff09;2.3 汇编&#xff08;.o文件&#xff09;2.4 链接&#xff08;生成可执行文件或库文件&#xff09; 三、认识函数库3.1 静态库…

一大波新型勒索病毒来袭(更新)

目前勒索病毒仍然是全球最大的威胁&#xff0c;最近一年针对企业的勒索病毒攻击越来越多&#xff0c;大部分勒索病毒是无法解密的&#xff0c;一定要保持高度的重视&#xff0c;近期又有一大波新型勒索病毒来袭...... HildaCrypt勒索病毒 加密后的文件后缀名HCY&#xff0c;如…

qt 置顶窗口崩溃无法退出解决,停止运行快捷键设置

有时置顶窗口调试崩溃需要快捷键进行关闭&#xff0c;如下设置即可 这样就可以通过全局快捷键退出了&#xff0c;避免置顶崩溃无法关闭程序的问题。

《系统架构设计师教程(第2版)》第7章-系统架构设计基础知识-02-基于架构的软件开发方法

文章目录 1. 基于架构的软件设计&#xff08;ABSD&#xff09;1.1 概述1.2 ABSD方法的3个基础 2. 概念与术语2.1 设计元素2.2 视角与视图2.3 用例和质量场景 3. ABSD模型4. 体系结构需求4.1 需求获取4.2 标识构件4.3 架构需求评审 5. 体系结构设计5.1 体系结构设计5.2 软件体系…

8 克隆虚拟机

后期集群我们需要使用多台服务器&#xff0c;此处我们先克隆三台&#xff0c;master,slave01,slave02. 1.先关闭模版虚拟机。再选择 模版虚拟机hadoop100右击--》管理 --》克隆 2.下图中特别注意&#xff1a;建议使用集群的名字作为虚拟机名称。目前克隆主机master. 以上步骤完…

Django数据库查询

聚合查询 分组查询 F与Q查询 默认情况下,用Q包裹的两个条件,用逗号分割也是and关系 choices参数 只要某个字段的可能性是完全可以列举出来的,可以采取choices参数 该gender字段存的还是数字,但是如果数字在上面的元组列举范围内,该怎么获取对应的值,如果不在范围内,会怎…

Java学习笔记(20)

可变参数 输入的参数数量不确定 底层就是把输入的参数放进一个数组里 只能写一个可变参数如果还有其他形参&#xff0c;可变参数要放在最后写 可变参数在底层就是一个数组 Collections Addall shuffle 练习 package exercise;import java.util.ArrayList; import java.util.C…

Nacos详解,从安装到服务部署,及nginx反向代理

Nacos 安装 Windows安装 下载 在Nacos的GitHub页面&#xff0c;提供有下载链接&#xff0c;可以下载编译好的Nacos服务端或者源代码&#xff1a; GitHub主页&#xff1a;https://github.com/alibaba/nacos GitHub的Release下载页&#xff1a;https://github.com/alibaba/nacos…

更新数据库表中的数据

目录 update 加上各种限制条件 update update 表名set 列名1xx,列名2xx 指定更新某列数据如果不添加where子句,则为全列更新 也可以在原有基础上更新: 注意,mysql语法里不支持,必须是列名列名数值 加上各种限制条件 比如加上order by子句,where子句,limit等 这些条件对于up…

Flutter 运行 flutter doctor 命令长时间未响应

由于 Flutter 运行 flutter doctor 命令&#xff0c;会从 pub(https://pub.dev/ 类似于 Node.js 的 npm) 上进行资源的下载&#xff0c;如果没有配置国内镜像&#xff0c;可能会由于其服务器在国外导致资源下载慢或者下载不下来&#xff0c;所以出现了运行 flutter doctor 命令…

权限提升-Web权限提升篇划分获取资产服务后台系统数据库管理相互转移

知识点 1、权限提升转移-分类&高低&场景 2、Web权限提升及转移-后台&数据库 3、后台权限及转移-转移对象&后台分类 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 基础点 0、为什么我们要学…

算法复杂度的介绍

算法复杂度简介 复杂度也叫渐进复杂度&#xff0c;包括时间复杂度和空间复杂度&#xff0c;用来分析算法执行效率与数据规模之间的增长关系&#xff0c;可以粗略地表示&#xff0c;越高阶复杂度的算法&#xff0c;执行效率越低。常见的复杂度并不多&#xff0c;从低阶到高阶有…

API(时间类)

一、Date类 java.util.Date类 表示特定的瞬间&#xff0c;精确到毫秒。 Date常用方法&#xff1a; public long getTime() 把日期对象转换成对应的时间毫秒值。 public void setTime(long time) 把方法参数给定的毫秒值设…

使用布丰投针法精确计算圆周率

如果在平面上有两条距离为d的平行线&#xff0c;假设如果拿一根长度是L的铁针随机的丢到纸面上去&#xff0c;那么试问铁针与某条直线所相交的概率是多少&#xff0c;假设铁针的长度L是大于平行线的距离d的&#xff0c;这样铁针就不会同时与两条直线所相交了。 添加图片注释&am…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《基于老化成本实时次梯度的异构储能系统功率分配策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…