2.5 数据库索引机制

我们往数据表里面保存数据记录越来越多,一旦达到上千万条,那怎么提高检索速度就需要认真考虑了。我们打开手机上的APP都希望能快些加载出内容,这里的因素有很多,但是如何减少数据查找的时间是其中的重要一环。索引机制就是提升数据检索速度的,其实它的原理非常的简单,那就是对数据排序。一旦数据排序之后,查找的速度就会翻倍。举一个现实生活中的例子,我们想查找机会这个英文单词,但是我只记得开头儿是op,后面儿怎么拼写已经不记得了,如果你拿到一本儿英文词典会怎么办?快速定位到O开头儿单词的区间,小范围查找opportunity这个单词,如果英文词典里的单词都没有排序,全是乱序的,那我们可能会疯掉。查一个单词就要从词典的第一页儿翻到最后一页儿,因为你不知道哪一页儿会有opportunity这个单词出现。

把话题再收回到数据库这边,数据表中的记录都是默认按照主键来排序的,所以按照主键查找记录的速度就很快了。虽然说主键有序了,但不代表其他的字段也是有序的。比如说姓名这个字段吧,它就是乱序的。如果说按照姓名去查找员工,记录这种条件查询很频繁,那就应该给姓名字段加上索引,以便提升查找的速度,这背后的原理跟查找单词是很像的。姓王的和姓王的人排在一起,姓李的和姓李的记录排在一起,我们查找王刚这个人,那就只需要在姓王的群体里面查找就好了呀,所以这个查找就是一个小范围的查找,而不是全表查找。

创建索引有两种办法,第一种是创建数据表的时候添加上,另外一种是建表之后再添加索引,那我就先说一下建表的时候怎么去设置索引吧。

一、创建索引

1.1 创建数据表的时候添加

索引都是有名字,你规定上名字,那就用你规定的这个名字,你不规定这个名字,我就用字段的名字。那么创建一个索引之后,再往下后面儿还可以定义其他字段的索引,甚至是外界约束

咱们创建一张表儿,使用一下索引这种机制,那这张数据表儿比如说是消息通知表儿吧,那么它叫做t_message,

第一个字段是主键是ID说过了,主键最好使用int类型,因为这个数字类型比varchar类型要好很多,速度也非常的快,然后给它加上这个primary key的主键约束。

再往下就是消息的内容content,然后这个消息也不是很长,比如说要求最多200个字符,然后是必须的填写数据的是not null好了

再往下就是消息的类型type,那这个消息类型,我用一下枚举,几种类型儿,比如说是公告这种类型,然后再往下还有是通报,个人通知,不为空

再往下,还有一个消息的创建时间是create time字段,然后类型儿就时间戳吧,因为我们的这个消息肯定都是1970年之后的这个消息了,所以用这个timestamp这个时间戳儿是没有问题的

所以说,一旦这个t_message数据表里边的记录特别多的时候,如果按照类型去查找消息的记录,那这个速度可能会比较慢,但是我加上索引之后,再根据type这个字段查找记录,就非常快了,好了,那我把这个index关键字给引进来对吧,对type进行索引

CREATE TABLE t_message(id INT UNSIGNED PRIMARY KEY,content VARCHAR(200) NOT NULL,type ENUM("公告","通报","个人通知") NOT NULL, # 枚举3中类型create_time TIMESTAMP NOT NULL,   # 创建时间用时间戳INDEX inx_type(type)               # 给type加上索引
);

1.2 建表之后再添加索引

如果数据表已经存在了,那么我们怎么给这个数据表儿的某个字段添加索引?

  • 用到的这个语法叫做create index写上索引的名称,然后on某一个表,某一个字段要添加索引,那你把表名和字段名称写上去就可以了。

  • 还有一种给这个已经存在的表添加索引的写法,叫做alter table,然后写上表的名称add index,然后索引的名称还有是字段的名称

这两种语法都可以对已经存在的数据表添加索引,

如果说索引加上去以后,我现在想看一下某一张数据表儿都设置了哪些索引,那么用的这个语法叫做show index from,然后写上表名,就可以查看这个数据表的所有索引了。

如果说索引我加错了,或者说这个索引我不想要了,可不可以把它删掉?可以,注意不是删除数据列,是把这个列的索引给删掉,那索引删掉以后就意味着这个索引对应的二叉树也就被删掉了,那么删除索引的语法叫做drop index,然后写上索引的名称on表名称就可以了

下面我们先删除一下刚刚创建的表的索引,然后再重新添加一下

# 删除索引
DROP INDEX inx_type ON t_message
# 重新添加索引
CREATE INDEX inx_type ON t_message(type)
# 查看索引
SHOW INDEX FROM t_message

1.3 设置索引的原则

第一个原则是针对于那些记录很多,而且经常被用来检索数据的表,我们挑选常用的检索字段作为索引,如果说数据表儿的记录很少,千800条根本不用去设置索引,就算数据库做全表儿扫描也是非常快的。因此,不用去设置索引,毕竟你设置完索引以后,数据表儿还要额外去维护二叉树,还是有一定的计算开销的,所以说数据少的时候根本就用不着去设置索引,另外,如果说数据表儿的记录虽然很多,但是数据的写入次数远远超过了查询,那么也是不适合创建索引的,比如说日志表吧,记录非常多的用户操作,但是业务上很少去查询日志表的数据,只是拿日志表作为一个行为的备案索引是提升检索速度的日志表,既然被很少查询,所以说就根本不用去设置索引了。

第二个原则,是指挑选那些常用来作为检索条件的字段去设置索引,比如说姓名,部门编号等字段都是经常拿来作为检索条件的。切记,把一张表的所有字段都去创建索引,那可真就是过犹不及了。数据库维护这么多的二叉树,计算成本还是非常高的。

第三个原则,就是不要在大字段类型上去创建索引。比如说长度超过50个字符的字符串儿就不适合设置索引了,因为字符越多,字符串排序的时间就越长,所以不建议在大字段类型上去创建索引。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

怎么给视频加字幕?6种给视频加字幕最简单的方法,不怕你学不会!

在这个快节奏的时代,越来越多的人会在公共场所观看视频,但为了不影响其它人,大多数人往往会将声音关闭。统计数据显示,高达69%的人在这样的环境中会静音观看视频,而有字幕的情况下,80%的人更倾向于完整观看…

刷题训练之栈

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握字符串算法。 > 毒鸡汤:学习,学习,再学习 ! 学,然后知不足。 > 专栏选自:刷题…

C++之spring

C之spring string类对象的访问及遍历操作 operator[] 返回pos位置的字符,const string类对象调用 这是一个既可以写也可以读的库函数,const修饰的内容是不可以更改的,所以是读 C类与对象里要想普通对象和const修饰的对象同时重载 第二种访…

2024华为杯研究生数学建模,代码思路和参考文章

F题X射线脉冲星光子到达时间建模, E题高速公路应急车道紧急启用模型, D题大数据驱动的地理综合问題, C题数据驱动下磁性元件的磁芯损耗建模, B题W LAN 组网中网络吞吐量建模, A题风电场有功功率优化分配&#xff…

Python画笔案例-057 绘制蜘蛛网

1、绘制蜘蛛网 通过 python 的turtle 库绘制 蜘蛛网,如下图: 2、实现代码 绘制蜘蛛网,以下为实现代码: """蜘蛛网.py """ import turtledef draw_circle(pos,r):"""pos:圆的中心点…

力扣最热一百题——搜索二维矩阵

目录 题目链接:240. 搜索二维矩阵 II - 力扣(LeetCode) 题目描述 解法一:暴力不解释 Java写法: 运行时间 C写法: 运行时间 时间复杂度以及空间复杂度 解法二:利用自带的大小关系进行Z型走…

电商ISV 电商SaaS 是什么

Independent Software Vendors的英文缩写,意为“独立软件开发商” 软件即服务(SaaS) 指一种基于云技术的软件交付模式 订阅收费 这些公司叫做ISV软件供应商,通过SaaS服务交付收费 为什么会有电商ISV 从商家角度划分:有独立品牌商家、大商…

叉车限速器外接LED屏,监督厂区安全,让速度慢下来!

叉车限速器外接LED屏,可实时显示当前叉车行驶中的速度,单/双面电子显示屏供用户选择,方便企业人员监控司机当前行驶速度,当速度超过指定值时,叉车速度报警系统发出声光警示,提醒行人、司机,超速…

最新适用:关于夫妻共同债务的裁判规则+司法观点

✦ 重点条文 ✦ 《民法典》第一千零六十四条 夫妻双方共同签名或者夫妻一方事后追认等共同意思表示所负的债务,以及夫妻一方在婚姻关系存续期间以个人名义为家庭日常生活需要所负的债务,属于夫妻共同债务。 夫妻一方在婚姻关系存续期间以个人名义超…

新手入门:小程序架构快速上手

目录 新建项目和配置 项目基本结构 新建小程序页面 修改项目首页 全局配置 窗口 tabBar 页面配置 小程序基本语法 wxml 数据绑定 条件渲染 列表渲染 wxss wxss 对比 css rpx import 全局样式和局部样式 js wxs 数据请求 get和post请求 小程序和跨域 小程…

特征工程与交叉验证在机器学习中的应用

数据入口:学生考试表现影响因素数据集 - Heywhale.com 本数据集提供了关于影响学生考试成绩的多种因素的全面概述。数据集包含了有关学习习惯、出勤率、家长参与、资源获取等方面的信息。 数据说明 字段名说明Hours_Studied每周学习的小时数Attendance出勤率&…

30个GPT提示词天花板,一小时从大纲到终稿

PROMPT 1 中文:构建研究背景与意义,阐述研究问题的紧迫性和重要性。 English: Establish the research background and significance, elucidating the urgency and importance of the research question. 中文:设计研究目的与目标&#xff…

深入解析:HTTP 和 HTTPS 的区别

网络安全问题正变得日益重要,而 HTTP 与 HTTPS 对用户数据的保护十分关键。本文将深入探讨这两种协议的特点、工作原理,以及保证数据安全的 HTTPS 为何变得至关重要。 认识 HTTP 与 HTTPS HTTP 的工作原理 HTTP,全称超文本传输协议&#xf…

go 安装依赖超时

一、配置代理 go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.io,direct go get github.com/unidoc/unioffice

对象关系映射ORM

目录 ORM【重要】 1、 什么是ORM 2、 实体类 3、 ORM改造登录案例 ORM【重要】 1、 什么是ORM 目前使用JDBC完成了CRUD,但是现在是进行CRUD,增删改方法要设计很多参数,查询的方法需要设计集合才能返回. 在实际开发中,我们需要将零散的数据封装到对象处理. ORM (Object Rela…

十九、石英晶体振荡电路

石英晶体振荡电路 1、石英晶体的特点、等效电路、特性曲线; 2、石英晶体振动器的特点, 3、石英晶体振动器的振荡频率

软考(中级-软件设计师)计算机系统篇(0921)

六、计算机系统组成(五大部件) (冯.诺依曼) 冯.诺依曼计算机的特点: 计算机有五大部件组成:输入设别,输出设备,控制器,运算器,存储器;指令和疏忽都以同等地位存于存储器…

为什么年轻人都热衷找搭子,而不是找对象?

在繁华的都市中,有一个名叫晓悦的年轻人。晓悦每天穿梭于忙碌的工作和快节奏的生活之间,渐渐地,她发现身边的朋友们都开始找起了 “搭子”。 有一天,晓悦结束了一天疲惫的工作,坐在咖啡店里,看着窗外匆匆而…

为写论文头疼?推荐4款ai写毕业论文初稿的软件

写论文对于许多学生来说是一项既重要又具挑战性的任务。为了帮助大家更高效地完成这一过程,我将推荐四款优秀的AI写毕业论文初稿的软件,并详细介绍它们的功能和优势。 传送门:https://www.aipaperpass.com?piclLGw 千笔-AIPassPaper是一款功…

面向对象例题之例题的特性

答案:C 解析:对象里面的方法和属性数量是不确定的,可以不断扩展写多个属性和方法 清洗的边界是对象必备的,哪些是这个类的,哪些是其他类的都有体现。 良好的定义行为一般指定义良好的属性和方法 可扩展性指的是子类…