当前位置: 首页 > 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 进…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...