知识不成体系?这篇Mysql数据库将成为你的解忧杂货店!(索引)

 欢迎来到@一夜看尽长安花 博客,您的点赞和收藏是我持续发文的动力

对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:3329759426@qq.com 。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

    专栏:

  • java全栈
  • C&C++
  • PythonAI
  • PCB设计

文章概述:对mysql的 索引种类的介绍&优缺点&使用场景&对应的习题&常见问题的解答&注意点

关键词:Mysql   索引

本文目录

索引优点:

索引缺点

什么时候需要创建索引

什么时候不需要创建索引

MySQL中的索引类型

普通索引

1.直接创建索引

2.修改表添加索引

3.创建表时指定索引列

4.删除索引

唯一索引

1.创建唯一索引

2.修改表添加唯一索引

3、创建表时指定唯一索引

主键索引

1.修改表添加主键索引

2.创建表时指定主键索引

组合索引(联合索引)

1.添加组合索引

2、创建表时创建组合索引

索引优点:

1.通过创建唯一性索引,可以保证数据库表中的每一行数据的唯一性;

2.可以加快数据的检索速度;

3.可以加速表与表之间的连接;

4.在使用分组和排序进行检索的时候,可以减少查询中分组和排序的时间;

 

索引缺点

1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加;

2.索引需要占用物理空间,数据量越大,占用空间越大;

3.会降低表的增删改的效率,因为每次增删改索引都需要进行动态维护;

 

什么时候需要创建索引

1.频繁作为查询条件的字段应该创建索引;

2.查询中排序的字段创建索引将大大提高排序的速度(索引就是排序加快速查找);

3.查询中统计或者分组的字段;

什么时候不需要创建索引

1.频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,保存索引文件;

2. where条件里用不到的字段,不创建索引;

3.表记录太少,不需要创建索引;

4.经常增删改的表;

5.数据重复且分布平均的字段,因此为经常查询的和经常排序的字段建立索引。注意某些数据包含大量重复数据,因此他建立索引就没有太大的效果,例如性别字段,只有男女,不适合建立索引;

MySQL中的索引类型

1.普通索引:

最基本的索引,它没有任何限制。

2.唯一索引:

索引列的值必须唯一,但允许有空值,如果是组合索引,则列值的组合必须唯一。

3.主键索引:

特殊的索引,唯一的标识一条记录,不能为空,一般用primary key来约束。

4.联合索引:

在多个字段上建立索引,能够加速查询到速度。

 

  • 普通索引

是最基本的索引,它没有任何限制。在创建索引时,可以指定索引长度。length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度,如果是BLOB和TEXT类型,必须指定length。

#查询索引

SHOW INDEX FROM table_name;  

index同样是对象,用DDl语句主键列自动创建索引

1.直接创建索引

CREATE INDEXindex_nameON table(column(length) (可以不写));

#为emp3表中的name创建一个索引,索引名 emp3_name_index;

create index emp3_name_index ON emp3(name); 

2.修改表添加索引

ALTER TABLE table_name ADD INDEXindex_name(column(length));

#修改emp3表,为addrees列添加索引,索引名为emp3_address_index;

alter table emp3 add index emp3_address_index(address); 

3.创建表时指定索引列

CREATE TABLE`table`(

COLUMN TYPE ,

PRIMARY KEY(`id`),

INDEX index_name(column(length))

);


 

#创建emp4表,包含emp_id,name,address列, 同时为name列创建索引 ,索引名为emp4_name_index。

create table emp4
(emp_id intprimary key auto_increment,name
varchar(30),address varchar(50),index emp4_name_index(name)
); 

4.删除索引

DROP INDEX indexnameONtablename;

#删除mep3表中索引名为emp3_address_index的索引。

drop index emp3_address_index on emp3; 

  • 唯一索引

唯一索引与普通索引类似,不同的就是: 索引列的值必须唯一,但允许有空值。

有唯一约束就有唯一索引

创建唯一索引的时候必须要保证该列中没有重复数据

 

1.创建唯一索引

CREATE UNIQUE INDEXindexNameON table(column(length));

#为emp表中的name创建一个唯一索引,索引名为emp_name_index。

create unique indexemp_name_indexonemp(name); 

2.修改表添加唯一索引

ALTER TABLE table_name ADD UNIQUEindexName(column(length));

#修改emp表,为salary列添加唯一索引,索引名为emp_salary_index。

alter table emp add unique emp_salary_index(salary);

3、创建表时指定唯一索引

CREATE TABLE`table`(

COLUMNTYPE ,

PRIMARY KEY(`id`),

UNIQUEindex_name(column(length))

);


 

#创建emp5表,包含emp_id,name,address列,同时为name列创建唯一索引。索引名为emp5_name_index。

create table emp5(emp_id int primary key,name varchar(30),address
varchar(30),unique emp5_name_index(name)); 

  • 主键索引

主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引。(就是添加主键约束)

1.修改表添加主键索引

ALTER TABLE表名ADD PRIMARY KEY(列名);

#修改emp表为employee_id添加主键索引。

alter table emp add primary key(employee_id);

2.创建表时指定主键索引

CREATE TABLE`table`(

COLUMNTYPE ,

PRIMARY KEY(column)

);

#创建emp6表,包含emp_id,name,address列,同时为emp_id列创建主键索引

create table emp6(employee_id int primary key auto_increment,name
varchar(20),address varchar(50));  

  • 组合索引(联合索引)

组合索引是指使用多个字段创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用(最左前缀原则)

最左前缀原则

就是最左优先。

如: 我们使用表中的name,address,salary创建组合索引,那么想要组合索引生效, 我们只能使用如下组合:

name/address/salary

name/address

name/

如果使用addrees/salary或者是salary则索引不会生效

1.添加组合索引

ALTER TABLE table_name ADD INDEXindex_name(column(length),column(length));

#修改emp6表,为name,address列创建组合索引

alter table emp6 add index emp6_index_n_a(name,address);  

2、创建表时创建组合索引

CREATE TABLE`table`(COLUMN_name COLUMNTYPE ,COLUMN_name COLUMNTYPE ,

INDEXindex_name(column(length),column(length))

);

#创建emp7表,包含emp_id,name,address列,同时为name,address列创建组合索引。

create table emp7(emp_id int primary key auto_increment,name
varchar(20),address varchar(30),index emp7_index_n_a(name,address));

 

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

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

相关文章

基于bootstrap的12种登录注册页面模板

基于bootstrap的12种登录注册页面模板,分三种类型,默认简单的登录和注册,带背景图片的登录和注册,支持弹窗的登录和注册页面html下载。 微信扫码下载

【SGX系列教程】(四)Intel-SGX 官方示例分析(SampleCode)——LocalAttestation

文章目录 一.LocalAttestation原理介绍1.1本地认证原理1.2 本地认证基本流程1.3 本地认证核心原理 二.源码分析2.1 README2.1.1 编译流程2.1.2 执行流程(双进程执行 or 单进程执行,在后面执行部分有展示效果)2.1.3 如何获取已签名的Enclave的…

【SpringBoot】SpringBoot核心启动流程源码解析

SpringBoot总体流程 当我们启动一个SpringBoot程序的时候,只需要一个main方法就可以启动,但是对于其中流程时如何执行的,以及如何调用spring的IOC和AOP机制,本篇带着这个问题来整体体系化的梳理下流程。 SpringBootApplication …

redis的IO多路复用

多路IO复用是一种同时监听多个文件描述符(如socket)的状态变化,并能在某个文件描述符就绪时执行相应操作的技术,在redis中,多路IO复用技术主要用于处理客户端的连接请求和读写操作,以实现高并发,高性能服务&#xff0c…

OFDM技术简介——背景

l 1966 年, R. W. Chang 提出在带限信道中用 正交信号 同时传输 多路数据 的原理,同时这种传输方式保证系统中不存在符号间串扰和子信道间干扰,该技术可以有效提高频谱利用率,可以有效对抗信道多径衰落。 l 1971 年, …

【无标题】c# WEBAPI 读写表到Redis

//c# WEBAPI 读写表到Redis using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using Newtonsoft.Json; using StackExchange.Redis; using System.Data; using System.Web; namespace …

Spring动态代理详解

一,动态代理 我发现Spring框架中的动态代理是一种非常强大的机制,它可以在运行时为接口或类创建动态代理,然后通过这些代理在方法调用前后添加额外的行为。在后续Spring的AOP(面向切面编程)支持中扮演了关键角色。 二…

农林企业资质提升策略:聚焦农业综合生态乙级认证

1. 深入了解资质要求 首要任务是全面细致地研究乙级资质的最新标准和要求,包括企业规模、技术人员配置、过往项目经验、财务状况、管理体系等具体指标。 2. 专业团队构建 强化技术团队,确保拥有一支包含注册农业工程师、生态学专家、环境工程师、农业…

vue 自定义组件 实现跟使用

新建文件组件 选择器作用 ~ 波浪线这个是选择 li 后面的所有 a标签 调用 到使用的文件下引入 使用 效果

每日算法-插值查找

1.概念 插值查找是一种改良版的二分查找,其优势在于,对于较为均匀分布的有序数列,能够更快地使得mid中间游标快速接近目标值. 2.计算公式 中间游标计算公式. 公式说明: 公式的主要思路是,以第一次定位mid中间游标为例, 在接近平均分配的情况下,左右游标之间的差值表示总计供…

Animate软件基础:从单个图层复制帧

在使用Animate软件制作内容时,有时会需要复制制作好的部分动画,到新的场景中,或者从一个制作文件中复制内容到另一个制作文件,这就需要复制帧的操作,这里讲一下从单个图层复制帧的方法。 在图层中选择一组帧。要选择整…

React@16.x(44)路由v5.x(9)源码(1)- path-to-regexp

目录 1,作用2,实现获取 match 对象2.1,match 对象的内容2.2,注意点2.3,实现 1,作用 之前在介绍 2.3 match 对象 时,提到了 react-router 使用第3方库 path-to-regexp 来匹配路径正则。 我们也…

新能源汽车 LabCar 测试系统方案(二)

什么是LabCar测试 LabCar测试目标是进行整车黄板台架功能测试,用于整车开发和测试阶段,满足设计人员和测试人员的试验需求,以验证整车性能,减少开发工作量。系统主要用于测试静态及动态工况下的纯电动汽车的各项功能实现情况。 …

git 用户名密码Clone代码

#密码中包含,则使用%40代表 cd /disk03/wwwroot/GitDemo/BuildTemp && git clone -b dev --single-branch http://root:test%40123192.168.31.104/root/SaaS.Auto.Api.git git pull origin dev 今天使用LibGit2Sharp在Linux上Clone代码时报错,因…

【计算机网络】HTTP——基于HTTP的功能追加协议(个人笔记)

学习日期:2024.6.29 内容摘要:基于HTTP的功能追加协议和HTTP/2.0 HTTP的瓶颈与各功能追加协议 需求的产生 在Facebook、推特、微博等平台,每分每秒都会有人更新内容,我们作为用户当然希望时刻都能收到最新的消息,为…

laravel Dcat Admin 入门应用(三)Grid 之 Column

Dcat Admin 是一个基于 Laravel-admin 二次开发而成的后台构建工具,只需很少的代码即可构建出一个功能完善的高颜值后台系统。支持页面一键生成 CURD 代码,内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的 HTML 代码。 larav…

如何在Vue3项目中引入TypeScript

在这篇文章中,我们将一步步指导你如何在Vue3项目中引入TypeScript。TypeScript是一种强类型的JavaScript超集,可以帮助我们在编写代码时避免许多错误,提高代码的可维护性。下面是具体的实现过程: 第一步:初始化Vue3项目…

Python | Leetcode Python题解之第188题买卖股票的最佳时机IV

题目: 题解: class Solution:def maxProfit(self, k: int, prices: List[int]) -> int:if not prices:return 0n len(prices)k min(k, n // 2)buy [0] * (k 1)sell [0] * (k 1)buy[0], sell[0] -prices[0], 0for i in range(1, k 1):buy[i] …

尚硅谷vue2的todolist案例解析,基本概括了vue2所有知识点,结尾有具体代码,复制粘贴学习即可

脚手架搭建 1-初始化脚手架(全局安装) npm install -g vue/cli2-切换到创建项目的空目录下 vue create xxxx整体结构 整体思路 App定义所有回调方法 增删改查 还有统一存放最终数据,所有子组件不拿数据,由App下发数据&#xf…

App托管服务分发平台 index-uplog.php 文件上传致RCE漏洞复现

0x01 产品简介 App托管服务分发平台是一个为开发者提供全面、高效、安全的应用程序托管、分发和推广服务的平台。开发者可以将自己开发的应用程序上传到平台上,平台会对上传的应用程序进行审核,确保应用的质量和安全性。平台会根据开发者的要求,将应用分发到不同的应用市场…