MySql数据库---索引、引擎、事务

news2025/1/15 8:34:59

思维导图

索引

索引特点

通过某一列的特征.给表添加一个索引列.索引列需要mysql来维护.也会消耗内存和cpu资源.

索引实现原理

通过算法来实现: 常见有hash算法和b_tree树来实现.
把列中的值通过hash计算出一个整数值.把整数值单独存储成为索引列.用于记录位置.避免全表扫描.

索引作用

提升查询的效率.

索引的分类

单索引:
    普通索引 -- index 需要创建
    唯一索引 -- 唯一约束自带索引
    主键索引 -- 主键约束自带索引
组合索引:
    两个或者多个列共同组成索引.[了解]

语法:

-- 方式1-创建表的时候直接指定
create table student(
    sid int primary key,-- 主键自带索引
    card_id varchar(20),
    name varchar(20),
    gender varchar(20),
    age int,
    birth date,
    phone_num varchar(20),
    score double,
    index index_name(name) -- 给name列创建普通索引
);
-- todo 查询库中所有的索引
select * from mysql.`innodb_index_stats` a where a.`database_name` = 'day12';
​
-- todo 创建表后添加索引.
-- 方式2-直接创建
-- create [unique] index indexname on tablename(columnname);
create index index_gender on student(gender);
​
-- 方式3-修改表结构(添加索引)
-- alter table tablename add [unique] index indexname(columnname)
alter table student add index index_age(age);
-- todo 删除和查看索引----------------------------------------------------------------
​
-- todo 查询库中所有的索引
select * from mysql.`innodb_index_stats` a where a.`database_name` = 'day12';
-- 查看表中的索引
show index from student; 
​
drop index index_age on student; -- 删除索引
alter table student drop index index_gender;-- 删除索引
​
-- todo 唯一索引----------------------------------------
-- 方式1-创建表的时候直接指定
create  table student2(
    sid int primary key,
    card_id varchar(20),
    name varchar(20) unique ,
    gender varchar(20),
    age int,
    birth date,
    phone_num varchar(20),
    score double,
    unique index_card_id(card_id) -- 给card_id列创建索引
);
-- 方式2-直接创建
-- create unique index 索引名 on 表名(列名)
create unique index index_card_id on student2(card_id);
​
-- 方式3-修改表结构(添加索引)
-- alter table 表名 add unique [索引名] (列名)
alter table student2 add unique index_phone_num(phone_num);
​
​
-- 主键索引无需创建--主键自带索引.

组合索引语法

-- 组合索引
use mydb5;
-- 创建索引的基本语法-- 普通索引
-- create index indexname on table_name(column1(length),column2(length)); 
create index index_phone_name on student(phone_num,name);
-- 操作-删除索引
 drop index index_phone_name on student; 
-- 创建索引的基本语法-- 唯一索引
create  unique index index_phone_name on student(phone_num,name); 
​
​
select * from student where name = '张三'; -- 无法命中索引--
select * from student where phone_num = '15100046637'; 
select * from student where phone_num = '15100046637' and name = '张三'; 
select * from student where name = '张三' and phone_num = '15100046637'; 
/* 
  三条sql只有 2、3、4能使用的到索引idx_phone_name,因为条件里面必须包含索引前面的字段  才能够进行匹配。
  而3和4相比where条件的顺序不一样,为什么4可以用到索引呢?是因为mysql本身就有一层sql优化,他会根据sql来识别出来该用哪个索引,我们可以理解为3和4在mysql眼中是等价的。 
*/

索引总结

索引的优点:
大大加快数据的查询速度
使用分组和排序进行数据查询时,可以显著减少查询时分组和排序的时间
创建唯一索引,能够保证数据库表中每一行数据的唯一性
在实现数据的参考完整性方面,可以加速表和表之间的连接
​
 
索引的缺点:
创建索引和维护索引需要消耗时间,并且随着数据量的增加,时间也会增加
索引需要占据磁盘空间
对数据表中的数据进行增加,修改,删除时,索引也要动态的维护,降低了维护的速度
​
创建索引的原则:
更新频繁的列不应设置索引
数据量小的表不要使用索引(毕竟总共2页的文档,还要目录吗?)
重复数据多的字段不应设为索引(比如性别,只有男和女,一般来说:重复的数据超过百分之15就不该建索引)
首先应该考虑对where 和 order by 涉及的列上建立索引

引擎

概念:

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。
不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。
用户可以根据不同的需求为数据表选择不同的存储引擎

常见引擎

MyISAM:Mysql 5.5之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务
InnoDB:事务型速记的首选引擎,支持ACID事务,支持行级锁定,MySQL5.5成为默认数据库引擎
Memory: 所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在MYSQL重新启动是会丢失。
​
------------------------------------------------------------------------
Archive :非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive 拥有高效的插入速度,但其对查询的支持相对较差
Federated :将不同的 MySQL 服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用

代码操作

-- 查询当前数据库支持的存储引擎:
show engines;
-- 查看当前的默认存储引擎:
show variables like ‘%storage_engine%’;
-- 查看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎): 
show create table student; 
 
-- 创建新表时指定存储引擎:
create table(...) engine=MyISAM;
 
-- 修改数据库引擎
alter table student engine = INNODB;
alter table student engine = MyISAM;
-- 修改MySQL默认存储引擎方法
1. 关闭mysql服务 
2. 找到mysql安装目录下的my.ini文件: 
3. 找到default-storage-engine=INNODB 改为目标引擎,
   如:default-storage-engine=MYISAM 
4. 启动mysql服务

事务

在MySQL中的事务(Transaction)是由存储引擎实现的,在MySQL中,只有InnoDB存储引擎才支持事务。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
事务用来管理 DDL、DML、DCL 操作,比如 insert,update,delete 语句,默认是自动提交的。

事务的操作

#1、开启事务:Start Transaction
任何一条DML语句(insert、update、delete)执行,标志事务的开启
命令:BEGIN 或 START TRANSACTION
​
#2、提交事务:Commit Transaction
成功的结束,将所有的DML语句操作历史记录和底层硬盘数据来一次同步
命令:COMMIT
​
#3、回滚事务:Rollback Transaction
失败的结束,将所有的DML语句操作历史记录全部清空
命令:ROLLBACK 
​
#设置提交方式
set autocommit=0 禁止自动提交 
set autocommit=1 开启自动提交 

事务四大特征:

事务隔离级别

设置隔离级别

-- 查看隔离级别 
show variables like '%isolation%';
-- 设置隔离级别
/*
set session transaction isolation level 级别字符串
级别字符串:read uncommitted、read committed、repeatable read、serializable
*/
-- 设置read uncommitted
set session transaction isolation level read uncommitted;
-- 设置read committed
set session transaction isolation level read committed;
-- 设置repeatable read
set session transaction isolation level repeatable read;
-- 设置serializable
set session transaction isolation level serializable;

                

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

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

相关文章

NVME盘未格式化导致Ubuntu20.04启动慢

背景 最近公司一款产品转产,工厂组装好后,用我提供的系统镜像烧录,系统起来后发现Ubuntu20.04转圈了90秒才进入图形界面,这是不可接受的,公司老总要求当天必须解决。 定位 分析syslog 看不到系统启动时的日志&…

maven项目package打包的时候遇到-source 1.5 中不支持 try-with-resources

maven项目package打包的时候遇到-source 1.5 中不支持 try-with-resources遇到:-source 1.5 中不支持 try-with-resources错误信息。 解决办法 在pom.xml中增加一下代码,如果你的JDK版本不是用的1.8,请记得修改为你当前的JDK版本号。 <build><plugins>

怎么给视频加动态字幕

怎么给视频添加动态字幕&#xff1f;动态字幕不仅能帮助观众更好理解视频内容&#xff0c;特别是当视频中存在复杂的术语、方言、外语或背景噪音时。通过精心设计的动态字幕&#xff0c;视频制作者可以强调关键词汇、短语或情感表达&#xff0c;从而增强内容的吸引力和感染力。…

(35)信号频谱的双边谱与单边谱

文章目录 前言一、仿真代码二、仿真结果画图 前言 本文首先使用MATLAB生成一段余弦信号&#xff0c;然后对其进行FFT变换&#xff0c;首先计算出信号的双边谱&#xff0c;然后在双边谱的基础上计算出信号的单边谱。 一、仿真代码 代码如下&#xff1a; %% 生成余弦波 % 指定…

3D Gaussian Splatting前向渲染代码解读

文章目录 3D Gaussian Splatting前向渲染简介3DGS前向渲染流程伪代码 代码解读栅格化主流程初始化常量和变量预处理生成Idx为排序做准备查找最高有效位device级别的并行基数排序排序后处理渲染 预处理获取3D高斯点的id&#xff0c;变量初始化检查3D高斯点是否在视锥体范围内计算…

Finops成本优化企业实践-可优化篇

引言&#xff1a;即上一章讨论了finops的第一步--可视化之后&#xff0c;本篇继续讨论finops第二步--可优化&#xff0c;其中涉及到可视化的部分请读者移步致上一篇。 笔者今年在项目上完成了40%的费用节省&#xff0c;从一月份的每月9万美刀降至十月份的每月5万多美刀。本篇会…

智慧交通:科技保障出行安全

智慧交通是当代城市发展的重要方向之一&#xff0c;以安全、高效、智能为目标&#xff0c;通过科技手段对交通进行管理和优化。安防系统作为智慧交通的重要组成部分&#xff0c;在保障交通安全、提高交通效率方面起着重要作用。本文将从巡检漫游、能耗监测和智能照明三个方面介…

macOS Sequoia运行缓慢的原因及解决方法

最近&#xff0c;许多升级到macOS Sequoia的用户反映&#xff0c;系统运行速度变慢&#xff0c;影响了日常使用体验。这种问题可能是由于多种原因导致的&#xff0c;例如系统资源消耗过大、磁盘空间不足或某些应用程序的不兼容。本文将深入分析macOS Sequoia运行缓慢的常见原因…

穷举vs暴搜vs深搜vs回溯vs剪枝(三)

文章目录 字母大小写全排列优美的排列N 皇后有效的数独 字母大小写全排列 题目&#xff1a;字母大小写全排列 思路 对每个位置的字符有两种情况 不修改&#xff1a;数字字符&#xff0c;直接递归下一层&#xff1b;修改&#xff1a;字母字符&#xff0c;大写改小写、小写改大写…

Linux_进程控制

一&#xff1a;进程创建 fork()函数创建新进程 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1 进程调用fork&#xff0c;当控制转移到内核中的fork代码后&#xff0c;内核做&#xff1a;…

分享一些毕业论文答辩的ppt模板啦

优秀的论文需要有更精炼的载体呈现&#xff0c;如何提炼论文之中的精华并将其完整传递给听众&#xff08;你的导师或同学&#xff09;是每位毕业生的必学功课。PPT作为图文格式的集大成者&#xff0c;能够在一定程度上满足上面的需求&#xff0c;所以&#xff0c;学会利用ppt&a…

关乎于电子地图

文章目录 一、OGC与OpenGIS二、google map三、瓦片坐标系统四、可用地图图源汇总4.1Google Map4.2天地图4.3 必应地图4.4 高德公开地图4.5 星图地球4.6 ArcGIS可用的图源 一、OGC与OpenGIS OGC&#xff08;Open Geospatial Consortium&#xff09;——开放地理信息联盟&#x…

HCIE-Datacom题库_01_防火墙【18道题】

一、单选题 1.相比较于路由器、交接机&#xff0c;防火墙转发独有的模块为? 交换网板 MPU LPU SPU 解析&#xff1a; SFU&#xff08;Switch Fabric Unit&#xff09;&#xff1a;交换网板&#xff0c;负责整个系统的数据平面数据平面提供高速无阻塞数据通道&#xff0…

Linux系统:配置Apache支持CGI(Ubuntu)

配置Apache支持CGI 根据以下步骤配置&#xff0c;实现Apache支持CGI 安装Apache&#xff1a; 可参照文章&#xff1a; Ubuntu安装Apache教程。执行以下命令&#xff0c;修改Apache2配置文件000-default.conf&#xff1a; sudo vim /etc/apache2/sites-enabled/000-default.con…

【深度学习量化交易2】财务自由第一步,三个多月的尝试,找到了最合适我的量化交易路径

在上一篇文章中&#xff0c;我讲到了尝试开展量化交易的一些初步的想法&#xff1a;Mr.看海&#xff1a;【深度学习量化交易1】一个金融小白尝试量化交易的设想、畅享和遐想 一晃三个多月时间过去了&#xff0c;十一前后股市突然爆火&#xff0c;行情也像过山车一样&#xff0…

面对服务器掉包的时刻困扰,如何更好的解决

在数字化时代&#xff0c;服务器的稳定运行是企业业务连续性的基石。然而&#xff0c;服务器“掉包”现象&#xff0c;即数据包在传输过程中丢失或未能正确到达目的地的情况&#xff0c;却时常成为IT运维人员头疼的问题。它不仅影响用户体验&#xff0c;还可能导致数据不一致、…

spring boot热部署

使用热部署解决了每次都需要重新启动的问题&#xff0c;但不过热部署的在对于改动比较小时速度可能快一些&#xff0c;改动大的话尽量停止 1.使用热部署之前需要在pom.xml文件中导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifa…

基于SpringBoot+vue学生成绩管理系统

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的学生成绩管理系统&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL…

网关Gateway作用介绍和快速入门

目前架构问题分析 这里有很多微服务&#xff0c;每个微服务都需要晚上访问数据库去完成各自的业务&#xff0c;并且需要在nacos进行注册和管理&#xff0c;每一个微服务之间需要相互调用的时候&#xff0c;可以用Feign进行调用&#xff0c;当外部需要访问的时候&#xff0c;就直…

Linux操作系统——外存的管理(实验报告)

实验 Linux系统外存管理 一、实验目的 熟练Linux系统外存管理的方法与命令。 二、实验环境 硬件&#xff1a;PC电脑一台&#xff0c;网络正常。 配置&#xff1a;win10系统&#xff0c;内存大于8G 硬盘500G及以上。 软件&#xff1a;VMware、Ubuntu16.04。 三、实验内容 …