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

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...