MySQL之索引与事务

一 索引的概念

一种帮助系统查找信息的数据

数据库索引

是一个排序的列表,存储着索引值和这个值所对应的物理地址无须对整个表进行扫描,通过物理地

址就可以找到所需数据是表中一列或者若干列值排序的方法

需要额外的磁盘空间

索引的作用

1 数据库利用各种快速定位技术,能够大大加快查询速率当表很大或查询涉及到多个表时,可以成干上万倍地提高查询速度

2 可以降低数据库的IO成本,并且还可以降低数据库的排序成本

3 通过创建唯一性索引保证数据表数据的唯一性可以加快表与表之间的连接在使用分组和排序时,可大大减少分组和排序时间

索引的副作用

1 索引需要占用额外的磁盘空间(对于MyISAM引擎而言,索引文件和数据文件是分离的,索引文件用于保存数据记录的地址。而nnoDB 引擎的表数据文件本身就是索引文件当表很大或查询涉及到多个表时,可以成千上万倍地提高查询速度)

2 在插入和修改数据时要花费更多的时间,因为索引也要随之变动

创建索引的原则依据

表的主键、外键必须有索引记录数超过300行的表应该有索引经常与其他表进行连接的表,在连接字段上应该建立索引唯一性太差的字段不适合建立索引更新太频繁地字段不适合创建索引

经常出现在where子句中的字段,特别是大表的字段应该建立索引索引应该建在选择性高的字段上索引应该建在小字段上,对于大的文本字段甚至超长字段不要建卖己

二 索引的分类

1 普通索引

最基本的索类型,没有唯一性之类的限制
创建普通索引的方式

创建表的时候指定索引
CREATE TABLE 表名 ( 字段1 数据类型,字段2 数据类型[,...],INDEX 索引名 (列名));

例:create table test(id int(4) not null,name varchar(10) not null,cardid varchar(18) not null,index id_index (id));
show create table test;

直接创建索引

CREATE  INDEX   索引名  ON  表名  (列名[(length)]);

 

修改表时创建索引

ALTER  TABLE  表名  ADD  INDEX  索引名 (列名);

创建表的时候指定索引

CREATE TABLE 表名 ( 字段1 数据类型,字段2 数据类型[,...],INDEX 索引名 (列名));

2 唯一索引

与普通索引类似,但区别是唯一索引列的每个值都唯一。
唯一索引允许有空值(注意和主键不同)。如果是用组合索引创建,则列值的组合必须唯一。添加唯一键将自动创建唯一索引。

创建唯一索引
直接创建唯一索引

CREATE UNIQUE INDEX 索引名 ON 表名(列名);

创建表的时候指定

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...],UNIQUE 索引名 (列名));

3 主键索引

是一种特殊的唯一索引,必须指定为“PRIMARY KEY”。
一个表只能有一个主键,不允许有空值。 添加主键将自动创建主键索引。

创建表的时候指定

4 组合索引(单列索引与多列索引)

可以是单列上创建的索引,也可以是在多列上创建的索引。需要满足最左原则,因为select语句的 where条件是依次从左往右执行的,所以在使用select 语句查询时where条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。

5 全文索引(FULLTEXT)

适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。
在 MySQL5.6 版本以前FULLTEXT 索引仅可用于 MyISAM 引擎,在 5.6 版本之后 innodb 引擎也支持 FULLTEXT 索引。全文索引可以在 CHAR、VARCHAR 或者 TEXT 类型的列上创建。每个表只允许有一个全文索引。

使用全文索引查询

SELECT * FROM 表名 WHERE MATCH(列名) AGAINST('查询内容');

 

 

直接创建索引

ALTER TABLE 表名 ADD FULLTEXT 索引名 (列名);

 

创建表的时候指定索引

CREATE TABLE 表名 (字段1 数据类型[,...],FULLTEXT 索引名 (列名)); 
#数据类型可以为 CHAR、VARCHAR 或者 TEXT


 

6 查看索引

show index from 表名;
show index from 表名\G; 竖向显示表索引信息


show keys from 表名;
show keys from 表名\G;

7 删除索引

直接删除索引

DROP INDEX 索引名 ON 表名;

修改表方式删除索引

ALTER TABLE 表名 DROP INDEX 索引名;

删除主键索引

ALTER TABLE 表名 DROP PRIMARY KEY;
 

 三 MySQL事务的概念

它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位

1 事务的ACID特点

原子性:指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。

一致性:指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

隔离性:指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。

持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
 

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

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

相关文章

浅谈RPC的理解

浅谈RPC的理解 前言RPC体系Dubbo架构最后 前言 本文中部分知识涉及Dubbo,需要对Dubbo有一定的理解,且对源码有一定了解 如果不了解,可以参考学习我之前的文章: 浅谈Spring整合Dubbo源码(Service和Reference注解部分&am…

数字化战略失配企业现状,可惜了!

尽管大部分的企业领导者已经意识到数字化转型对于企业革新业务模式、提升运营效率、抢占市场先机的关键作用,但是,认知上的转变并不等同于成功的实践。在实际操作中,往往出现战略与企业现状不符的现象,这无疑会使得所有的努力付诸…

windows查看局域网内所有已使用的IP IP扫描工具 扫描网段下所有的IP Windows环境下

推荐使用: Advanced IP Scanner 官网下载: https://www.advanced-ip-scanner.com/

学习vue3第九节(新加指令 v-pre/v-once/v-memo/v-cloak )

1、v-pre 作用:防止编译器解析某个特定的元素及其内容,即v-pre 会跳过当前元素以及其子元素的vue语法解析,并将其保持原样输出; 用于:vue 中一些没有指令和插值表达式的节点的元素,使用 v-pre 可以提高 Vu…

LeetCode 17 / 100

目录 普通数组最大子数组和合并区间轮转数组除自身以外数组的乘积缺失的第一个正数 LeetCode 53. 最大子数组和 LeetCode 56. 合并区间 LeetCode 189. 轮转数组 LeetCode 238. 除自身以外数组的乘积 LeetCode 41. 缺失的第一个正数 普通数组 最大子数组和 给你一个整数数组 …

十、MySQL主从架构配置

目录 一、资源配置 二、主从同步基本原理: 1、具体步骤: 2、数据库是靠什么同步的? 3、pos与GTID的区别? 三、配置一主两从 (1)为主库和从库创建复制账户, 分别在主从库上执行如下命令&a…

React Native:跨平台移动应用开发的利器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Python进程与线程开发

目录 multiprocessing模块 线程的开发 threading模块 setDaemon 死锁 线程间的通信 multiprocessing模块 运行python的时候,我们都是在创建并运行一个进程,(linux中一个进程可以fork一个子进程,并让这个子进程exec另外一个程序)。在pyt…

机器学习——压缩网络作业

文章目录 任务描述介绍知识蒸馏网络设计 Baseline实践 任务描述 网络压缩:使用小模型模拟大模型的预测/准确性。在这个任务中,需要训练一个非常小的模型来完成HW3,即在food-11数据集上进行分类。 介绍 有许多种网络/模型压缩的类型&#xff0…

Java并发

目录 线程 什么是线程 进程和线程的区别 线程的生命周期 什么是多线程 并发与并行 多线程的三种实现方式 继承Thread类 1.创建类继承Thread类 2.重写run()方法 3.创建对象启动线程 实现Runnable接口 1.自己定义一个类实现Runnable接口 2.重…

由浅到深认识C语言(14):枚举

该文章Github地址:https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn…

python毕业设计基于flask应急救援调度系统django

此系统设计主要采用的是python语言来进行开发,采用flask框架技术,框架分为三层,分别是控制层Controller,业务处理层Service,持久层dao,能够采用多层次管理开发,对于各个模块设计制作有一定的安全…

动态规划题目练习

基础知识: 动态规划背包问题-CSDN博客 动态规划基础概念-CSDN博客 题目练习: 题目1:过河卒 题目描述 棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马…

WebGIS管线在线编辑器(电力、水力、燃气、热力、热能管线)

随着GIS等信息技术的发展,地下管线管理也从二维平面向三维立体管理迈进。传统管线信息管理系统将管线及其附属设施抽象成二维平面内的点、要素,并使用各类点符号、不同颜色线段进行表达。虽能一定程度上满足城市智慧运行的需要,但不能很直观的…

【Linux】文件描述符 - fd

文章目录 1. open 接口介绍1.1 代码演示1.2 open 函数返回值 2. 文件描述符 fd2.1 0 / 1 / 22.2 文件描述符的分配规则 3. 重定向3.1 dup2 系统调用函数 4. FILE 与 缓冲区 1. open 接口介绍 使用 man open 指令查看手册&#xff1a; #include <sys/types.h> #include …

02. Java 中的关键字、标识符、运算符、分隔符和注释

关键字 Java 的关键字(keyword、保留字)是 Java 语言中具有特殊含义的单词&#xff0c;它们被保留供 Java 自身使用&#xff0c;不能被用作标识符。例如 public、class、void、int 等都是关键字。 关键字在 Java 语法中起着重要的作用&#xff0c;它们定义了编程的结构、控制…

Python 深度学习第二版(GPT 重译)(一)

前言 序言 如果你拿起这本书&#xff0c;你可能已经意识到深度学习在最近对人工智能领域所代表的非凡进步。我们从几乎无法使用的计算机视觉和自然语言处理发展到了在你每天使用的产品中大规模部署的高性能系统。这一突然进步的后果几乎影响到了每一个行业。我们已经将深度学…

【数据结构与算法】(13):冒泡排序和快速排序

&#x1f921;博客主页&#xff1a;Code_文晓 &#x1f970;本文专栏&#xff1a;数据结构与算法 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多数据结构与算法点击专栏链接查看&…

揭秘2024云渲染平台优惠陷阱!有些看似划算实则很坑

近年来&#xff0c;随着云渲染技术的飞速发展&#xff0c;越来越多的人开始关注并使用云渲染平台。然而其中隐藏着一些消费陷阱&#xff0c;需要我们谨慎小心。有时候一些平台看似优惠&#xff0c;实际上可能是一个深不见底的坑。 今天小编就来对比分析2024年市面上主流的五款云…

MT管理器 使用手册

MT管理器 论坛&#xff1a;https://bbs.binmt.cc/ 使用技巧系列教程&#xff1a;https://www.52pojie.cn/thread-1259872-1-1.html MT管理器 使用手册 &#xff1a;https://mt2.cn/guide/&#xff1a;https://www.bookstack.cn/read/mt-manual/80b8084f6be128c0.md&#xff…