当前位置: 首页 > news >正文

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;

相关文章:

MySQL数据库之索引

目录 一、索引的概念 二、索引的作用 三、索引的副作用 四、创建索引的规则 1、适合创建为索引的字段的规则 2、MySQL的优化 哪些字段/场景适合创建索引,哪些不适合 五、索引的分类和创建 1、索引的分类 2、三种创建方式 3、索引的创建演示 1、创建普通索…...

OpenCV(四):Mat支持的运算

目录 1.对两个 Mat 对象按元素进行运算,有加法、减法、乘法和除法等运算。 2.Mat类支持逻辑与、或、非等逻辑运算, 1.对两个 Mat 对象按元素进行运算,有加法、减法、乘法和除法等运算。 加法:Mat Mat,保存到 resul…...

WebRTC音视频通话-WebRTC推拉流过程中日志log输出

WebRTC音视频通话-WebRTC推拉流过程中日志log输出 之前实现iOS端调用ossrs服务实现推拉流流程。 推流:https://blog.csdn.net/gloryFlow/article/details/132262724 拉流:https://blog.csdn.net/gloryFlow/article/details/132417602 在推拉流过程中的…...

用Jmeter压测问题解决

最近做一个基于duboo服务的接口,需要进行稳定性测试。但是用Jmeter GUI 方式跑只能持续2个小时左右,Jmeter就崩溃了,日志报错:out of memory 解决方法如下: 直接运行jmeter的java包试试: 1、打开jmeter.…...

C语言:字符函数和字符串函数(一篇拿捏字符串函数!)

目录 求字符串长度: 1. strlen(字符串长度) 长度不受限制函数: 2. strcpy(字符串拷贝) 3. strcat(字符串追加) 4. strcmp(字符串比较) 长度受限制函数: 5. strncpy(字符串拷贝) 6. strncat(字符串追加) 7. strncmp(字符串比较) 字…...

问道管理:成交量买卖公式?

跟着股票商场的如火如荼,人们对于怎么解读和使用成交量进行股票生意的需求日积月累。成交量是指在某一特定时间内进行的股票生意的数量,它是投资者们研判商场状况和制定生意战略的重要指标之一。那么,是否存在一种最厉害的成交量生意公式呢&a…...

【MySQL】5、MySQL高阶语句

一、常用查询(增、删、改、查) 对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。 例如只取 10 条数据、对查询结果进行排序或分组等等 模板表: 数据库有一张info表,记录了学生…...

【Linux】redhat7.8配置yum在线源【redhat7.8镜像容器内配置yum在线源】通用

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...

强大的处理器和接口支持BL304ARM控制器

在智慧医疗领域,BL304可以用于实现医疗设备的智能化、远程监控和数据交换。在智慧电力领域,BL304可以帮助实现电网的智能化管理,提升电力供应的效率。在智慧安防领域,BL304可以实现智能监控、智能门锁等应用,保障安全。…...

react 基础知识(一)

1、 安装1 (版本 react 18) // 安装全局脚手架(create-react-app基于webpackes6) npm install -g create-react-app //使用脚手架搭建项目 create-react-app my-app // 打开目录 cd my-app // 运行项目 npm start2、初体验 impo…...

SpringBoot整合JUnit、MyBatis、SSM

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 SpringBoot整合 一、SpringBoot整合JUnit二、Spri…...

virtuoso61x中集成calibre

以virtuoso618为例,在搭建完电路、完成前仿工作之后绘制版图,版图绘制完成之后需要进行drc和lvs【仅对于学校内部通常的模拟后端流程而言】,一般采用mentor的calibre来完成drc和lvs。 服务器上安装有virtuoso和calibre,但是打开la…...

com.google.guava:guava 组件安全漏洞及健康分析

组件简介 维护者google组织许可证类型Apache-2.0首次发布2010 年 4 月 26 日最新发布时间2023 年 8 月 1 日GitHub Star48189GitHub Fork10716依赖包28,694依赖存储库219,576 Guava 是 Google 的一组核心 Java 库,其中包括新的集合类型(例如 multimap 和…...

Hadoop服务脚本

#!/bin/bash process("NameNode" "SecondaryNameNode" "DataNode" "NodeManager" "ResourceManager") JAVA_HOME"/opt/software/jdk1.8.0_371" HADOOP_HOME"/opt/software/hadoop-3.3.6"# 定义颜色的AN…...

[QT]设置程序仅打开一个,再打开就唤醒已打开程序的窗口

需求&#xff1a;speedcrunch 这个软件是开源的计算器软件。配合launch类软件使用时&#xff0c;忘记关闭就经常很多窗口&#xff0c;强迫症&#xff0c;从网上搜索对版本进行了修改。 #include "gui/mainwindow.h"#include <QCoreApplication> #include <…...

数据库(二) Oracle篇

Oracle SQL常用函数 概述 SQL函数有单行函数和多行函数,其区别为&#xff1a; 单行&#xff1a;输入一行,返回一行,如字符、数字、转换、通用函数等多行&#xff1a;输入多行,返回一行,也称为分组函数、组函数、聚合函数,且多行函数会自动滤空 单行函数 字符函数 CONCAT(…...

TDengine函数大全-目录

TDengine函数大全 详情见具体页面&#xff0c;点击进入。 1.数学函数 ABSACOSASINATANCEILCOSFLOORLOGPOWROUNDSINSQRTTAN 2.字符串函数 CHAR_LENGTHCONCATCONCAT_WSLENGTHLOWERLTRIMRTRIMSUBSTRUPPER 3.转换函数 CAST TO_ISO8601TO_UNIXTIMESTAMPTO_JSON 4.时间和日期…...

代理模式之静态代理

代理模式是一种常见的设计模式&#xff0c;它允许一个对象&#xff08;代理对象&#xff09;代表另一个对象&#xff08;真实对象&#xff09;进行操作。在软件开发中&#xff0c;代理模式被广泛应用于各种场景&#xff0c;例如网络请求的代理、权限控制的代理等。 静态代理是…...

LeetCode——栈的压入、弹出序列

这里我用下面的例子子来讲解一下模拟栈的实现。 例子1&#xff1a;pushed [1,2,3,4,5] popped [4,5,3,2,1] 思路&#xff1a;第一步&#xff1a;我们先创建一个栈&#xff0c;然后将pushed的数据压进去 第二步&#xff1a;判断&#xff01; 当压入栈的数据和popped第一个数据…...

Flutter 逆向安全

前言&#xff1a; 前几天在 "学习" 一个项目&#xff0c; 发现是用 Flutter 开发的。之前研究过 flutter 的逆向&#xff0c;早期 Flutter 有工具可以通过快照进行反编译&#xff1a;《对照表如下》 新的版本开发者没有维护了。 目前没有很好的工具 可以对 Flutter 进…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...