事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。就比如: 张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加1000。这一组操作就必须在一个事务的范围内,要么都成功,要么都失败。正常情况: 转账这个操作, 需要分为以下这么三步来 ......
321
0
0
2022-11-23
2.7 索引设计原则1). 针对于数据量较大,且查询比较频繁的表建立索引。2). 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。3). 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。4). 如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。 ......
322
0
0
2022-11-23
2.6.7 前缀索引当字段类型为字符串(varchar,text,longtext等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO, 影响查询效率。此时可以只将字符串的一部分前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率。1). 语法create index idx_xxxx on table_name(colu ......
280
0
0
2022-11-23
2.6.6 覆盖索引尽量使用覆盖索引,减少select *。那么什么是覆盖索引呢?覆盖索引是指 查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到 。接下来,我们来看一组SQL的执行计划,看看执行计划的差别,然后再来具体做一个解析。explain select id, profession from tb_user where profession ......
319
0
0
2022-11-23
2.6.5 SQL提示目前tb_user表的数据情况如下:索引情况如下:把上述的 idx_user_age, idx_email 这两个之前测试使用过的索引直接删除。drop index idx_user_age on tb_user; drop index idx_email on tb_user; A. 执行SQL : explain select ......
334
0
0
2022-11-23
3.6.4.4 or连接条件用or分割开的条件, 如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。explain select * from tb_user where id = 10 or age = 23; explain select * from tb_user where phone = '17799990017' ......
329
0
0
2022-11-23
2.6.3 范围查询联合索引中,出现范围查询(>,<),范围查询右侧的列索引失效。explain select * from tb_user where profession = '软件工程' and age > 30 and status = '0'; 当范围查询使用> 或 < 时,走联合索引了,但是索引的长度为49,就说 ......
302
0
0
2022-11-23
2.6 索引使用2.6.1 验证索引效率在讲解索引的使用原则之前,先通过一个简单的案例,来验证一下索引,看看是否能够通过索引来提升数据查询性能。在演示的时候,我们还是使用之前准备的一张表 tb_sku , 在这张表中准备了1000w的记录。这张表中id为主键,有主键索引,而其他字段是没有建立索引的。我们先来查询其中的一条记录,看看里面的字段情况,执行如下SQ ......
360
0
0
2022-11-23
2.5.3 profile详情show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。通过have_profiling参数,能够看到当前MySQL是否支持profile操作:SELECT @@have_profiling ; 可以看到,当前MySQL是支持 profile操作的,但是开关是关闭的。可以通过set语句在session ......
332
0
0
2022-11-23
2.5 SQL性能分析2.5.1 SQL执行频率MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次:-- session 是查看当前会话 ; -- global 是查询全局数据 ; SH ......
293
0
0
2022-11-23
2.4 索引语法1). 创建索引CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name ( index_col_name,... ) ; 2). 查看索引SHOW INDEX FROM table_name ; 3). 删除索引DROP INDEX index_name ON table_ ......
334
0
0
2022-11-23
2.2.5 HashMySQL中除了支持B+Tree索引,还支持一种索引类型---Hash索引。1). 结构哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。如果两个(或多个)键值,映射到一个相同的槽位上,他们就产生了hash冲突(也称为hash碰撞),可以通过链表来解决。2). 特点A. Hash索 ......
288
0
0
2022-11-23
2.2.3 B-TreeB-Tree,B树是一种多叉路衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉。以一颗最大度数(max-degree)为5(5阶)的b-tree为例,那这个B树每个节点最多存储4个key,5个指针:我们可以通过一个数据结构可视化的网站来简单演示一下。https://www.cs.usfca.edu/~galles/visua ......
295
0
0
2022-11-23
2.2 演示表结构及其数据如下:假如我们要执行的SQL语句为 :select * from user where age = 45;1). 无索引情况在无索引情况下,就需要从第一行开始扫描,一直扫描到最后一行,我们称之为 全表扫描,性能很低。2). 有索引情况如果我们针对于这张表建立了索引,假设索引结构就是二叉树,那么也就意味着,会对age这个字段建立一个二 ......
320
0
0
2022-11-23
1.3.2 MyISAM1). 介绍MyISAM是MySQL早期的默认存储引擎。2). 特点不支持事务,不支持外键支持表锁,不支持行锁访问速度快3). 文件xxx.sdi:存储表结构信息xxx.MYD: 存储数据xxx.MYI: 存储索引1.3.3 Memory1). 介绍Memory引擎的表数据时存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这 ......
328
0
0
2022-11-23