【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;

★★★​​​​​​​

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

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

相关文章

[python]bar_chart_race绘制动态条形图

最近在 B 站上看到了一个宝藏 up 主,名叫 "Jannchie见齐",专门做动态条形图相关的数据可视化。 可以看到做出的效果还是很不错的,但工具使用的是 JS,不是 Python,于是尝试搜索了一下,看看 Python…

100个openharmony开源demo:1.日历

准备用开发者手机写100个开源的demo不知道能不能实现,日拱一卒,期待蜕变。 第一个demo:日历,借鉴了网上的日历算法,自己用arkts写了界面和点击事件,各位可根据此demo写自己的日历选择器等组件。 1.目录结…

ISO 8601:日期和时间的国际标准

ISO 8601 介绍 ISO 8601,介绍一下 ISO 8601 是由国际标准化组织(International Organization for Standardization,ISO)发布的国际标准,其全称为《数据存储和交换形式信息交换日期和时间的表示方法》。 这一标准提供了…

【网站项目】293学生用品采购系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

供应链投毒预警 | 恶意Py组件tohoku-tus-iot-automation开展窃密木马投毒攻击

概述 上周(2024年3月6号),悬镜供应链安全情报中心在Pypi官方仓库(https://pypi.org/)中捕获1起新的Py包投毒事件,Python组件tohoku-tus-iot-automation 从3月6号开始连续发布6个不同版本恶意包&#xff0c…

sentinel系统负载自适应流控

系统负载自适应流控 规则配置 规则创建 public class SystemRule extends AbstractRule {private double highestSystemLoad -1;private double highestCpuUsage -1;private double qps -1;private long avgRt -1;private long maxThread -1; }SystemRule类包含了以下几…

数据机构-2(顺序表)

线性表 概念 顺序表 示例&#xff1a;创建一个存储学生信息的顺序表 表头&#xff08;Tlen总长度&#xff0c; Clen当前长度&#xff09; 函数 #include <seqlist.c> #include <stdio.h> #include <stdlib.h> #include "seqlist.h" #include &…

Arcade绘制各种各样的文本

""" Example showing how to draw text to the screen.If Python and Arcade are installed, this example can be run from the command line with: python -m arcade.examples.drawing_text """ import arcade# 设置屏幕参数 SCREEN_WIDTH 12…

[GYCTF2020]Ezsqli ---不会编程的崽

又是sql新题型哦。继续收集&#xff01; 既然知道是sql注入就不墨迹了。初步判断盲注&#xff0c;判断盲注的方发不用说了吧&#xff0c;然后fuzz一下&#xff0c;information被过滤了。再次可以判断为盲注与无列名注入。 管他有列名还是无列名&#xff0c;先找到表。由于info…

kafka学习笔记01(小滴课堂)

介绍分布式流处理平台kafka快速认知 介绍分布式流处理平台kafka核心概念解释 急速部署-Kafka相关环境准备和安装 Linux环境下Zookeeper和Kafka安装启动 解压两个软件的压缩包&#xff1a; tar -zxvf 启动zk: 去log目录进行查看&#xff1a; 查看一下2181端口是否被占用: 安装…

十九、网络编程

目录 一、什么是网络编程二、网络编程三要素2.1 IP2.2 InetAddress的使用2.3 端口号2.4 协议 三、UDP通信程序3.1 发送数据3.2 接收数据3.3 练习 四、UDP的三种通信方式五、TCP的通信程序六、三次握手和四次挥手七、练习7.1 TCP通信练习1——多发多收7.2 TCP通信练习2——接收和…

Java疫苗接种管理系统

本系统lw为2024-3-21本人原创&#xff0c;查chong13% 1.3W字&#xff0c;可以直接上交&#xff0c;这并不是乱七八糟的技术文档和项目文档。 4.2 功能结构设计 可视化的疫苗接种管理系统功能结构设计主要包括以下几个模块&#xff1a; 登录注册模块&#xff1a;这个模块负责…

浅浅迈入C++门槛

从今天起&#xff0c;我要开始hello&#xff0c;world。 往后更要做到&#xff0c;拳打数据结构&#xff0c;脚踢Linux。 这就是江湖人的风范。 拼搏百天&#xff0c;我要学希普拉斯普拉斯。 C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许…

echarts实践总结(常用二):折线图(特点:渐变、面积区域)

目录 第一章 echarts基本使用 第二章 echarts实践——折线图 效果展示 第一章 echarts基本使用 Echarts常用配置项(详细入门)_echarts配置项手册-CSDN博客 柱状图案例&#xff1a; echarts实践总结(常用一)&#xff1a;柱状图&#xff08;特点&#xff1a;渐变色、点击缩放、…

vue3父子通信、跨层通信

子传父 通过 ref标识 获取真实的 dom对象或者组件实例对象 父组件获取子组件内部属性和方法 顶层组件向任意的底层组件传递数据和方法&#xff0c;实现跨层组件通信 非响应式数据父修改不了子的内容 子组件调用父组件方法

【现代C++】范围基于的for循环

现代C中的范围基于的for循环&#xff08;range-based for loop&#xff09;是C11引入的一项特性&#xff0c;旨在简化对容器或范围的迭代过程。这种循环语法不仅使代码更清晰易读&#xff0c;还减少了迭代时的错误。以下是范围基于的for循环的详细介绍&#xff1a; 1. 基本用法…

CTK插件框架学习-源码下载编译(01)

1、编译环境 window11、vs17、Qt5.14.0、cmake3.27.4 2、下载链接 cmake&#xff1a;Index of /files/v3.20 qt&#xff1a;Index of / vs22以前的版本需要登录下载&#xff1a;Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 vs22下载&#xff1a;下载 Visu…

Arduino IDE工程代码多文件编程和中文设置

一、esp8266模块信息 二、中英文切换 点击文件( File )–选择首选项( Preference )—选择语言( Language )—选择中文–点击确定( OK ) 三、多文件编程 在Arduino编程中&#xff0c;将代码分割成多个文件是一种很好的做法&#xff0c;特别是项目变得越来越大和复杂时。这样…

Linux 系统是如何收发⽹络包的

Linux 系统是如何收发⽹络包的&#xff1f; ⽹络模型 为了使得多种设备能通过⽹络相互通信&#xff0c;和为了解决各种不同设备在⽹络互联中的兼容性问题&#xff0c;国际标准化组织制定了开放式系统互联通信参考模型&#xff08;Open System Interconnection Reference Mode…

亚马逊云科技:企业如何开启生成式AI之旅?

如果要评选最近两年全球科技行业最热门的细分领域&#xff0c;那么生成式AI绝对会以遥遥领先的票数成为当仁不让的冠军。 然而眼见生成式AI发展得如火如荼&#xff0c;越来越多的企业却陷入了深深的焦虑&#xff1a;应该如何开启生成式AI之旅&#xff1f;又该怎样搭建大模型&am…