【MySQL】索引和事物

目录

♫索引

♪什么是索引

♪索引的数据结构

♪索引的使用

 ♫事务

♪什么是事务

♪事务的特性

♪事务的使用


♫索引

♪什么是索引

索引是存储在磁盘上的一个数据结构,通过索引可以快速地定位到存储在磁盘上的数据。

索引在提高查询速度的同时,还提高了增删改(增删改的同时还需要额外调整索引)和空间的开销(构建索引需要额外的磁盘空间)。

♪索引的数据结构

索引的目的是为了加快查询速度,在我们已知的数据结构中,虽然哈希表查询的时间复杂度(O(1))最低,但哈希表并不能查询指定范围的数据,故并不适合构成MySQL里的索引而二叉搜索树虽然能查询指定范围,但由于是二叉,当数据量大时,树的高度就会比较高,元素之间的比较次数就多,读硬盘的次数也就会变多,从而速度就会降低,故也不是很适合构成MySQL里的索引。那MySQL里的索引底层到底是什么呢?其实它的底层是一种名叫B+树的数据结构。

B+树具有以下特点:

①.B+树是一颗N插搜索树,每个节点有N个key,N个key划分出N个区间,最后一个key为所在区间的最大值

②.父节点的key会在子节点中重复出现,并且是该子节点的最大值,这样叶子节点就包含所有数据的全集

③.叶子结点会以类似链表的形式互相连接

B+树由于是N叉搜索树,故高度会比二叉搜索树低,从而读取硬盘的次数就比较低;B+树的所有的查询都是落在叶子节点上,中间比较次数差不多,故查询操作比较均衡;由于B+数的叶子节点包含所有数据,故只需在叶子节点存放具体数据,非叶子节点只需存放索引值即可,这样极大节省了内存空间,就有可能将非叶子节点放进内存中缓存,进一步降低硬盘IO的次数。

♪索引的使用

♩查看索引
创建主键约束( PRIMARY KEY )、唯一约束( UNIQUE )、外键约束( FOREIGN KEY )时,会自动创建对应列的索引:
语法: show index from 表名;
mysql> create table student(id int primary key auto_increment, name varchar(20));
Query OK, 0 rows affected (0.06 sec)mysql> show index from student;
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table   | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| student |          0 | PRIMARY  |            1 | id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.01 sec)
♩创建索引
对于非主键、非唯一约束、非外键的字段,可以创建普通索引:
语法: create index 索引名 on 表名(列名);
mysql> create index idx_student_name on student(name);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> show index from student;
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table   | Non_unique | Key_name         | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| student |          0 | PRIMARY          |            1 | id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| student |          1 | idx_student_name |            1 | name        | A         |           0 |     NULL | NULL   | YES  | BTREE      |         |               |
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)

♩删除索引
语法: drop index 索引名 on 表名;
mysql> drop index idx_student_name on student;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> show index from student;
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table   | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| student |          0 | PRIMARY  |            1 | id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.00 sec)

注:

①.创建索引最好是在表创建之初执行,如果对已有大量数据的表创建索引会吃掉大量磁盘IO,花费很长时间

②.可以使用explain关键字显示出查询过程中具体的索引使用情况

③.每个索引列都有对应的B+树,对于非主键列的索引会先查询该索引列的B+树,再根据查询结果查询主键列的B+树

 ♫事务

♪什么是事务

事务是指在数据库中进行的一组相关的操作,被当作一个单独的工作单元处理,要么全部执行,要么全部回滚。

♪事务的特性

事务具有以下四个特性:

1. Atomicity(原子性):一个事务中的所有操作要么全部成功,要么全部失败,不能只执行其中部分操作。

2. Consistency(一致性):事务执行前后数据库的状态必须保持一致,也就是满足数据库的约束和规则。

3. Isolation(隔离性):当多个事务同时执行时,每个事务都应该被视为独立的,不能相互影响。每个事务必须独立执行,并发执行时不能出现干扰。

4. Durability(持久性):事务完成后,其所作的修改应该永久保存在数据库中,即使系统出现故障也不应该丢失。

♪事务的使用

MySQL中开启事务的语句为start transaction,提交事务的语句为commit,回滚事务的语句为rollback。事务的使用可以保证数据的一致性和完整性,避免数据损坏和丢失。

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)mysql> insert into student values(1,"张三");
Query OK, 1 row affected (0.02 sec)mysql> update student set name="李四" where name="张三";
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> commit;
Query OK, 0 rows affected (0.00 sec)

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

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

相关文章

Office Tool Plus免费安装使用Excel

Office Tool Plus 是一个强大且实用的 Office 部署工具,可以很方便地自定义部署 Office2021等版本,其内置迅雷引擎可帮助您更快地下载 Office,当然,你也可以使用 Office Tool Plus 内置的各种小工具或者功能快捷、方便地激活和管理…

时间复杂度O(40n*n)的C++算法:修改图中的边权

本篇源码下载 点击下载 1.12.1. 题目 给你一个 n 个节点的 无向带权连通 图,节点编号为 0 到 n - 1 ,再给你一个整数数组 edges ,其中 edges[i] [ai, bi, wi] 表示节点 ai 和 bi 之间有一条边权为 wi 的边。 部分边的边权为 -1&#xff08…

CANdb++数据库操作

CANdb数据库操作 创建工程结构文件夹新建数据库&总线描述节点设置节点创建配置Message属性信号设置节点收发信号 环境变量配置一致性检验数据库工程XVehicle.dbc导入工程文件总结 创建工程结构文件夹 在文件夹X-Vehicle-1下,建立工程目录文件夹CANdb&#xff0…

CustomNavBar 自定义导航栏视图

1. 创建偏好设置键 CustomNavBarTitlePreferenceKey.swift import Foundation import SwiftUI//State private var showBackButton: Bool true //State private var title: String "Title" //"" //State private var subtitle: String? "SubTitl…

相似性搜索:第 1 部分- kNN 和倒置文件索引

图片来源:维亚切斯拉夫叶菲莫夫 一、说明 SImilarity 搜索是一个问题,给定一个查询的目标是在所有数据库文档中找到与其最相似的文档。 在数据科学中,相似性搜索经常出现在NLP领域,搜索引擎或推荐系统中,其中需要检索最…

修改克隆虚拟机的静态ip地址

要修改克隆虚拟机的静态IP地址,您需要在虚拟机操作系统内部进行配置。以下是一般步骤,具体步骤可能因您使用的虚拟化平台和操作系统而有所不同。这里以使用VMware虚拟化平台和Windows操作系统为例: 注意:在更改虚拟机的网络设置之…

C# OpenVINO Cls 图像分类

效果 耗时 class idbrown_bear, score0.86 preprocess time: 0.00ms infer time: 2.72ms postprocess time: 0.02ms Total time: 2.74ms项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using Sdcb.OpenVINO.Natives; using System; using System.Diagnostics; using Sys…

python学习笔记4-二分查找

题目链接 一个List对象可以 ‘.bisect(val)’ 获得大于等于val的最小元素这道题目思想值得看一下 from sortedcontainers import SortedList class Solution:def avoidFlood(self, rains: List[int]) -> List[int]:ans [1] * len(rains)l SortedList() # 可以清空池子…

java基础之数组

数组 数组的本质是一个相同数据类型的元素集合。元素是数组的组成部分,数组中每一个元素都可以使用唯一的索引值来访问,这个索引值也可以叫做数组下标。数组是很多集合类的底层存储结构,在了解java集合类之前大家先了解一下数组吧。 数组初始…

地产三维实景vr展示的功能及特点

随着科技的不断发展,VR(虚拟现实)技术也越来越成熟。VR技术的广泛应用,已经逐渐渗透到各个领域,其中引人注目的就是虚拟展馆。虚拟展馆是一种利用VR技术构建的线上展示空间,让观众可以在家中就能参观展览,带来了极大地…

LCR 172.点名

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;LCR 173. 点名 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 二分找出第一个不是递增 1 的位置即可。 解题代码&#xff1a; class Solution { public:int takeAttendance(vector<in…

模板进阶和反向迭代器

文章目录 模板非类型模板参数模板特化函数模板特化类模板特化 模板分离编译 反向迭代器 模板 非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c…

【Android】关于touch设备TOOL_TYPE_STYLUS

这里通过log来查看触控笔的motionEvent&#xff0c; Overridepublic boolean onTouchEvent(MotionEvent event) {Log.i(tag, "event" event);return true;}Overridepublic boolean onGenericMotionEvent(MotionEvent event) {Log.i(tag, "G event" event…

基于CodeFormer实现图片模糊变清晰,去除马赛克等效果

前言 CodeFormer是一种基于AI技术深度学习的人脸复原模型&#xff0c;由南洋理工大学和商汤科技联合研究中心联合开发。该模型通过结合了VQGAN和Transformer等技术&#xff0c;可以通过提供模糊或马赛克图像来生成清晰的原始图像。可以实现老照片修复、照片马赛克修复、黑白照…

【ARM Coresight 系列文章 9.1 -- ITM 仪器化跟踪宏单元详细介绍】

文章目录 1.1 ITM 介绍1.1.1 ITM 功能介绍1.1.2 Cortex-M ITM 的地址范围1.2 ITM 使用1.2.1 ITM 寄存器介绍1.2.2 Cortex-M7 ITM 代码示例1.2.3 Cortex-M33 ITM 代码示例1.1 ITM 介绍 在debug 调试阶段通常都是使用 printf(printk) 来进行进行 log 输出,然后定位问题。那么如…

排序算法-希尔排序法(ShellSort)

排序算法-希尔排序法&#xff08;ShellSort&#xff09; 1、说明 我们知道当原始记录的键值大部分已排好序的情况下插入排序法非常有效&#xff0c;因为它不需要执行太多的数据搬移操作。希尔排序法是D.L.Shell在1959年7月发明的一种排序法&#xff0c;可以减少插入排序法中数…

安全论坛和外包平台汇总

文章目录 一. 网络安全论坛汇总二. 外包平台汇总1. 国内&#xff1a;2. 国外 一. 网络安全论坛汇总 安全焦点BugTraq&#xff1a;http://www.fuzzysecurity.com/Exploit-DB&#xff1a;https://www.exploit-db.com/hackone&#xff1a;https://www.hackerone.com/FreeBuf&…

保护你的爬虫免受CSRF攻击:深入了解CSRF-Token

CSRF&#xff08;Cross-Site Request Forgery&#xff09;是一种常见的网络攻击类型&#xff0c;可用于伪装用户发起的请求&#xff0c;因此保护你的爬虫免受CSRF攻击至关重要。在本文中&#xff0c;我们将深入探讨CSRF-Token&#xff0c;它在CSRF保护中的作用以及爬虫如何处理…

Java IO流

IO 即 Input / Output &#xff0c;输入输出流。IO流在Java中分为输入流和输出流&#xff0c;而根据数据的处理方式又分为字节流和字符流。 Java IO 流的 40 多个类都是从如下 4 个 抽象类基类中派生出来的。 InputStream /Reader : 所有的输入流的基类&#xff0c;前者是字节…

论文阅读之《Learn to see in the dark》

Learning to See in the Dark-CVPR2018 Chen ChenUIUC&#xff08;伊利诺伊大学厄巴纳-香槟分校&#xff09; Qifeng Chen, Jia Xu, Vladlen Koltun Intel Labs(英特尔研究院) 文章链接&#xff1a;https://arxiv.org/pdf/1805.01934.pdfhttps://arxiv.org/pdf/1805.01934.p…