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

MySQL之索引和事务

  • 索引
    • 什么是索引
    • 索引怎么用
    • 索引的原理
  • 事务
    • 使用事务
    • 事务特性
    • MySQL隔离级别

索引

什么是索引

索引包含数据表所有记录的引用指针;你可以对某一列或者多列创建索引和指定不同的类型(唯一索引、主键索引、普通索引等不同类型;他们底层实现也是不同的)
作用:表、索引、数据如同书本、目录、内容;能提高数据库性能、快速帮我们定位要看的位置
注意:索引会提高查询效率;但是增删改开销会变大;因为都需要再改变多一个索引;但是增删改通过是频率没那么高的
索引也不一定就能大大提高速度的;如果针对性别这种重复非常多的列加索引;意义就没那么大了

索引怎么用

查看:show index from 表名;
创建:create index 索引名 on 表名(字段名);
另外:
创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。加了索引就会去相应的列去查询;而没加则会一条一条去遍历;效率将会降低很多。(跟我们电脑文件搜索功能和everything一样;提示把文件信息存好在数据库;这样子查就不必真的去查这些这么大的文件)
删除索引:drop index 索引名 on 表名;
注意:创建和删除这两个操作最后是在建表的约定清楚;因为后面再来创建和删除这估计很危险;要吃很多资源
使用索引:我们只需要创建完了进行;数据库会自动通过搜索引擎评估哪种方案性价比最好;评估是否走索引;如果要走的话怎么走

索引的原理

1:哈希表?只能比较相等;没法范围查询;不行
2:二叉搜索树?查询元素时间复杂度;单边树跟链表一样O(n);能范围查询;但是元素多;树的高度就会比较高;比较的次数就会比较多。
3:N叉搜索树;分叉多;树的高度就降低了。每个节点有多个值,同时有多个分叉,树的高度降低了,比较次数虽然没有减少,但是在硬盘上读的次数减少了。因为每一个节点都是在硬盘上的(就好比你一次丢5袋垃圾肯定比丢5次一袋垃圾快);可能会出现在根节点、不深的位置查的比较快;查询速度不均衡。
4:B+树;N叉搜索树已经很合适但是还不够;需要进一步补充。量身定做;最大值要重复出现
在这里插入图片描述
这也是N插搜索树;每个节点包含N个key,N个key划分N个区间;最后一个Key是最大值;例如上面:11比8大就放15的左边;最右边永远最大。
父元素的Key会反复在子元素以最大值出现;最终在叶子节点包含所有数据全集;最后用类似链表方式连接
在这里插入图片描述
1:高度下降IO操作就少了、
2:范围查询更香;
3:所有的查询都落在叶子节点上;无论查哪个元素中间;中间的比较次数都不多
4:所有的Key都在叶子节点上体现;使用非叶子节点不必存表的数据行;把所有的数据行放到叶子节点上即可;非叶子节点只需要存索引列的值

如果多索引:
比如主键索引是id,非主键索引的姓名。
那么姓名索引的B+树的叶子节点存储的都是主键id,找到id后,再去主键索引idB+树去遍历,主键idB+树的叶子节点存储的是完整数据行

它的实现会帮我们构建好这颗树;然后我们要输入的数据就会走这颗树去查询
B+树只是在MySQL的InnDB这个数据库储存引擎所使用的典型数据结构。不同的数据库有不同的储存引擎,索引的数据结构也会有所差异。(储存引擎;实现数据库具体如何在硬盘上组织数据)

事务

事务初衷:把有些操作不能分割的打包成一个整体(原子性)。比如:转账分两部分;用户A钱 - -;用户B钱++。如果中间出现问题;导致的结果但是致命的;可能没转成功就扣钱了。
回滚事务:上述如果中间出现问题;就自动恢复执行之前的样子;让你看起来没执行的样子(就像你走5步回到原点;和你在原点一直没有动的区别)

使用事务

Start transaction;//开启事务;开启后这些sql代码先攒着;等commit再一起执行;保证原子性
sql;
sql
sql;
commit;//提交事务
//出现问题就rollback;回滚事务

事务特性

1:原子性
2:一致性;事务完成时或者失败,必须所有的事务都保持一致状态。(比如转账要么全部成功;要么全部失败回滚到最初;保持一致。双方总额是2000;转账成功或者失败总额都是2000;不能是转着成功就变2500;失败就变2000)
3:持久性;事务产生的修改会写入硬盘。(先把要执行的过程记录到硬盘;然后再真正的去执行;根据这个如果断电下次重连就知道上次执行到哪;然后进行回滚)
4:隔离性;一个数据库服务器;同时执行多个事务的时候;事务之间相互影响程度(一个服务器有多个客户端;可能并发出现线程安全问题;尤其是操作同一个表的时候)

MySQL隔离级别

隔离性越高;并发程度越低;效率是慢了点;但是准确度高。(反之则反之)
MySQL隔离级别就为我们提供不同档位的并发程度;有些场景我们可能需要准(算钱);有些场景我们可能需要快

脏读:我在进行修改博客的时候;然后另一个人在读;但是我改到一半发现我写错了;不行我得擦掉重写。而恰好我写错的部分就被那个人读走了(加锁:我在写的时候不给你读)
解决:降低并发性;提高隔离性(给写操作加锁)

不可重复读:根据脏读的要求;我写的时候不给另一个人看。ok;我写完了;另一个人现在开始读了一半;然后我发现有问题这个例子举的不好;我得重新修改一下;我把我博客改了重新发布。这就导致另一个人刚刚读到牛一天吃100斤草;再往下读;怎么变成马这样吃能一天跑千里呢?
解决:给读操作也加锁;读的时候;我不能改

幻读:根据上述两个要求;我又整活了。你读你的;不给我改是吧;我就是闲不下来;我要学习;我又写一篇新文章;或者觉得有篇不好我删掉重写;结果是他读当前的文件内容没问题;但是他看到的文件个数改变了。同一个事务;两次读到的结果集不同。
解决:舍弃并发;别卷了;他在读的时候你就休息一下;该休息就得好好休息;才能更好的学习

四个隔离级别:在这里插入图片描述
默认挡位是第三个;我们可以根据具体要解决需求场景;在MySQL配置文件决定使用哪个隔离级别

相关文章:

MySQL之索引和事务

索引什么是索引索引怎么用索引的原理 事务使用事务事务特性MySQL隔离级别 索引 什么是索引 索引包含数据表所有记录的引用指针;你可以对某一列或者多列创建索引和指定不同的类型(唯一索引、主键索引、普通索引等不同类型;他们底层实现也是不…...

⛳ 将本地已有的项目上传到 git 仓库

目录 ⛳ 将本地已有的项目上传到 git 仓库🏭 一、克隆 拷贝🎨 二、强行合并两个仓库 ⛳ 将本地已有的项目上传到 git 仓库 有两种方法: ​ 一、克隆 拷贝 ​ 二、强行合并两个仓库 🏭 一、克隆 拷贝 ​ 直接用把远程仓库拉到本…...

ADB常用命令整理(全网最全)

调试Android程序时,我们经常需要使用adb shell命令。adb是Android Debug Bridge的缩写,它充当调试桥梁的作用,就像一条连接开发机和设备之间的桥梁。 通过adb,我们可以在Eclipse中使用DDMS来调试Android程序,简单来说…...

BBS项目day02、注册、登录(登录之随机验证码)、退出登录、密码加密加盐、首页(导航条、模态框,修改密码)

一、注册 1.注册之前端页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册页面</title><!--动态引入文件-->{% load static %}<script src"{% static js/jquery.min.js %…...

HTML5+CSS3自用笔记

助解&#xff1a;解析编译&#xff0c;加载运行 浏览器的渲染过程 JS加载执行 普通js/sync&#xff1a;阻塞 DOM加载解析 async&#xff1a;下载完就执行&#xff0c;无依赖 <script type"text/javascript" src"x.min.js" async"async"&g…...

无则插入有则更新(PostgreSQL,MySQL,Oracle、SqlServer)

无则插入有则更新 PostgreSQL 无则插入有则更新 conflict(带有唯一性约束的字段)&#xff0c;根据此字段判断是更新还是插入 INSERT INTO student(id,name,sex) VALUES(1, 小明, 男) ON conflict (id) DO UPDATE SET id 1,name 小明,sex 男;无则插入有则不做操作 INSERT I…...

常见的 JavaScript 框架比较

以下是10种常见的JavaScript框架的比较&#xff1a; React&#xff1a;是由Facebook开发和维护的开源JavaScript库&#xff0c;用于构建用户界面。它允许你使用组件来构建复杂的UI&#xff0c;并专注于每个组件的内部逻辑&#xff0c;而不必担心管理整个应用程序的状态。WebBu…...

基于R语言APSIM模型进阶应用与参数优化、批量模拟

随着数字农业和智慧农业的发展&#xff0c;基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…...

AMD卡启动Stable Diffusion AI绘画的方法

WindowsAMD安装法 1.安装python 3.10.6&#xff0c;在python官网上下载安装程序&#xff0c;***重要*** 在安装的第一个窗口下方勾选“将python添加到path”。 2.安装git 3.WindowsAMD使用AUTOMATIC1111的directml这一个fork&#xff0c;在这个页面的第一段&#xff1a;https:/…...

Ubuntu系统kubeadm安装K8S_v1.25.x容器使用docker(K8S_v1.24版本以后依然使用docker容器管理)

安装所需要的全部文档请点击这里下载 系统是: root@k8s-master:~# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04 DISTRIB_CODENAME=jammy DISTRIB_DESCRIPTION=“Ubuntu 22.04.3 LTS” root@k8s-master:~# uname -a Linux k8s-master 5.15.0-76-generic #8…...

【MaxKey对接一】对接gitlab的oauth登录

MaxKey的Oauth过程 引导进入 GET http://{{maxKey_host}}/sign/authz/oauth/v20/authorize?client_idYOUR_CLIENT_ID&response_typecode&redirect_uriYOUR_REGISTERED_REDIRECT_URI 登录后回调地址 YOUR_REGISTERED_REDIRECT_URI/?code{{code}} 换取Access Token GET…...

【Buildroot】构建根文件系统等

文章目录 0. 前言10. 环境软件硬件 20. Buildroot 环境搭建简述下载环境搭建toolchain下载、安装构建镜像&#xff08;仅供参考&#xff09; 80. 问题点1. 编译、清除时提示权限不足 0. 前言 对嵌入式linux开发和linux开发环境不熟悉的同志们就不要往下看了 对嵌入式linux开发和…...

利用css动画和定时器setTimeout,实现上传图片进度条

思路 利用css动画和js定时器&#xff08;setTimeout&#xff09;&#xff0c;实现简单的进度条。 优势 不使用 setInterval&#xff0c;减少js代码量&#xff0c;业务代码更加简洁。 示意图 上传中上传成功上传失败 代码 html <!-- img-wrap有两种状态&#xff1a;u…...

关于VScode插件,你不得不知道的几件事

一、前言 VSCode是微软家一个非常轻量化的编辑器&#xff0c;体量虽轻&#xff0c;但是却有异常强大的功能。原因在于VSCode许多强大功能都是基于插件实现的&#xff0c;IDE只提供一个最基本的框架和基本功能&#xff0c;我们需要使用插件来丰富和扩展它的功能。 由于插件的重…...

MySQL 奇遇记三则

公司新项目&#xff0c;要使用 MySQL 数据库。 第一次使用 MySQL&#xff0c;有点小激动。听说过 N 多次&#xff0c;这一次终于用上了。 为什么是奇遇记&#xff1f; 因为在网上几乎搜索不到别人遇到和我一样的问题。 系统 &#xff1a;WINDOWS10X64 中文版 数据库&#xf…...

UI设计师的主要职责说明(合集)

UI设计师的主要职责说明1 职责&#xff1a; 1、负责公司移动端、PC端产品相关的交互、UI等设计 2、负责公司宣传册、海报、运营物料、banner等设计 3、负责公司品牌相关的视觉设计 3、制定相关设计规范&#xff0c;提高产品的可用性、不断优化产品体验; 4、与PM、运营紧密…...

SOLIDWORKS 2023中装配体配合的正确使用方法 硕迪科技

-SOLIDWORKS 装配体打开时是由不同的阶段和性能检查组成的。如果在创建装配体时未应用基本的配合方法&#xff0c;问题会随着时间的推移而累积&#xff0c;并且在使用时会出现明显的速度减慢。 如果您的装配体运行速度很慢&#xff0c;则很可能是在创建配合时出现了不良操作的症…...

代码随想录——96.不同的二叉搜索树

class Solution {public int numTrees(int n) {int[] dp new int[n1];dp[0] 1;dp[1] 1;for(int i 2;i < n ; i){for(int j 1; j < i;j){dp[i] dp[j-1]*dp[i-j];}}return dp[n];} }...

智安网络|零信任安全框架:保障数字化时代网络安全的最佳实践

随着数字化时代的快速发展&#xff0c;网络安全问题变得越来越突出。传统的安全防御模式已经不再适用于现代复杂的网络环境中。为了应对日益增长的网络威胁&#xff0c;零信任安全模式应运而生。 一、什么是零信任&#xff1f; 零信任是一种安全框架和哲学&#xff0c;它基于…...

Rancher管理K8S

1 介绍 Rancher是一个开源的企业级多集群Kubernetes管理平台&#xff0c;实现了Kubernetes集群在混合云本地数据中心的集中部署与管理&#xff0c;以确保集群的安全性&#xff0c;加速企业数字化转型。Rancher 1.0版本在2016年就已发布&#xff0c;时至今日&#xff0c;Ranche…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...