![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
文章平均质量分 57
ADRU
这个作者很懒,什么都没留下…
展开
-
百万级别mysql性能耗时自测
首次查询不走索引的条件下进行查询 耗时为 700ms左右 之后查询同样的sql,稳定在430ms (可能mysql自带的缓存机制)有索引(主键索引):首次查询140MS 之后稳定在2ms加入索引的耗时为 username字段的索引时间+主键索引的耗时 因为测试中name字段重复度较高 因此name索引查询几乎不耗时间,最终结果为4ms。原创 2024-04-21 17:27:36 · 386 阅读 · 0 评论 -
mysql事务
事务就是要么全部执行成功,要么全部执行失败比如转账事务:我这边点击了付款,那么相应的我这边钱会减少,但是商店那边钱会增加,如果中间出了异常,那么就会发生以下问题,我的钱减少了,但是商家的钱没有增加实际例子: 张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加1000。这一组操作就必须在一个事务的范围内,要么都成功,要么都失败。原创 2023-07-26 20:48:07 · 395 阅读 · 0 评论 -
sql优化:为什么通常选用根据id查询而不是根据name?
给name加上索引以后,就会产生一个二级索引,这样就会出现回表查找,它会先在name的B+Tree结构中查找到张三这个字段,接着想要全部的数据的话,还要根据张三对应的id进行查找id所在的B+Tree结构找到对应的id下面的行。在没有给name加索引的时候,id是有主键索引的,也就是聚集索引,这样就是一个B+Tree结构,很快就会定位到id,而name则是一行一行进行遍历。先来看一个最常见的问题,下面两个sql语句哪个效率更高一些?效率肯定慢于直接查找id。原创 2023-07-25 00:03:55 · 201 阅读 · 0 评论 -
深入了解数据库的索引分类以及回表查询原理
答案也是不可以的,我们要的是全部的数据,因此还会继续往下走,进入了聚集索引,然后呢,就开始找到了id对应的这一行的数据,这也就是回表查询。答案是肯定不会的,那样没办反快速找到name,也就是会优先走二级索引,快速定位到我们要找name字段,之后呢,我们就能够拿到id。比如一张表存在一个主键,那么它的主键构建的主键索引就会构成一个聚集索引,为B+Tree形状,将其规划为一行一行的数据,还是上面的表,我们已经加上了id的主键索引,再给name加上了索引以后,执行下面的语句。如果有主键,主键索引就是聚集索引。原创 2023-07-24 23:36:08 · 128 阅读 · 0 评论 -
为什么数据库的InnoDB存储引擎选择了B+tree索引结构?
叶子结点和非叶子结点都会存储数据,但是我们知道磁盘中是一块一块的存储数据的,也叫一页,那么这一页中如果存储key和指针的同时还存储数据,这样就会导致这一个节点上面能够存储的key和指针减少,这样就导致在大量的数据下,它的层级会比B+树要多。本质上也是一个二叉树,虽然不会产生形成链表的情况,但是同样的数据下,B+Tree的层级相对于二叉树更少。不管是什么数据,都要去叶子结点查找,查找结果稳定,而且形成了范围查找。hash索引,是无序的,不支持范围查找。顺序插入的情况下,会形成链表。原创 2023-07-24 23:10:30 · 66 阅读 · 0 评论 -
数据库中的Hash索引以及哈希碰撞
mysql的存储引擎当前默认为InnoDB,而它不支持hash索引,但是它会在特定的条件下,自动将B+树转换为hash结构。hash索引,就是用过一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。如果我的两个name字段计算出来的key相同,那么就会产生冲突,这就是我们所说的哈希冲突,也称之为哈希碰撞。3.查询效率极高,通常只需要一次检索就可以了(不出现hash碰撞的情况),效率要高于B+树索引。就比如下面的name字段,经过算法的分析,就会对应出一张hash表。原创 2023-07-24 22:45:25 · 436 阅读 · 0 评论 -
mysql数据库的索引
索引:是帮助Mysql高效获取数据的一种数据结构。上面这句在执行的时候,一定是按照顺序去扫描的,效率极低,如果表中的数据非常的庞大很耗费时间,如果数据库的age字段加上了索引,那么他现在就成了下面的形状,比如二叉树索引原创 2023-07-24 22:28:11 · 166 阅读 · 0 评论 -
mysql的存储引擎以及适用场景
不同的引擎具有不同的功能,存储引擎是mysql特有的在创建表的时候会指定存储引擎,如果不指定就会默认为 InnoDBInnoDB引擎在mysql5.5之后,就用做了默认的存储引擎,它是一种高可靠高性能的通用引擎支持事务;行级锁(相比于表锁,提高了性能),支持外键MyISAM早期版本中,MyISAM引擎被设为默认的存储引擎。它是一种较简单的引擎,适用于读密集的应用场景。然而,它不支持事务和外键约束,只支持表级锁。Memory。原创 2023-07-21 20:59:18 · 105 阅读 · 0 评论 -
主键的生成策略
Mybatis Plus 为我们提供了三种设置 主键生成策略的方式。它们的优先级顺序是:局部注解 > 全局 > 默认(雪花算法)原创 2023-03-10 00:07:42 · 589 阅读 · 0 评论 -
如何规范书写sql语句,让代码更加优雅
SQL语句在书写时,可能会包含复杂的子查询、嵌套语句等,这些语句层次较深,如果不使用缩进,那么整个SQL语句可能会显得比较混乱,不易于阅读和理解。可以使用在线SQL格式化工具将SQL语句复制到该工具中进行格式化,也可以将IDE(如SQL Server Management Studio、Oracle SQL Developer等)的自带格式功能设置好后格式化SQL代码。所以,建议在编写SQL语句时,使用缩进方式,尤其是在复杂的SQL语句中,缩进可以使SQL语句更加易读,易于维护。原创 2023-05-29 17:25:22 · 879 阅读 · 0 评论 -
sql语句的增删改操作附加代码
阐述数据库操作中的增删改操作原创 2022-07-01 23:08:07 · 291 阅读 · 0 评论 -
sql92语法和99语法介绍
sql92语法和99语法的用法以及优缺点原创 2022-07-01 23:04:24 · 541 阅读 · 0 评论 -
数据库sql语句详细介绍加代码
查询语句原创 2022-07-01 22:33:59 · 450 阅读 · 2 评论 -
数据库设计三大范式
如果我们讲学号和身高共同作为主键,这样的话,学号是和后面两个信息相关联的,但是体重和分数就和身高没有关系,因此违反了第二范式,这个时候就可以将这个表拆成两张,保证每一个列都和主键相关联。这句话的意思就是说:一个表里面的其他列都必须与主键相关,如果一个表用了两个或者两个以上的元素来作为主键,那么其他的列也必须与这两个元素都相关,不能够是只与其中一个元素相关。第二范式要求我们数据表里的每一条数据记录,都是可唯一标识的,而且所有的非主键字段,都必须完全依赖主键,不能只依赖主键的一部分。原创 2023-03-01 15:15:04 · 56 阅读 · 0 评论 -
基础sql代码讲解含运行截图(详细版)
LIMIT子句用于控制查询结果的总行数。GROUP BY子句用于将查询结果按照指定的列进行分组。一般建议采用 left join 或者 right join 前者会将左表的数据全部打印 后者会将右表的数据完全打印。ORDER BY子句用于按照指定的列对查询结果进行排序。WHERE子句用于指定一个条件,从表中筛选符合条件的数据。还可以不写字段名字进行插入,但是此种方式必须和数据库字段一一对应,容易出错,所以开发中一般禁用。表示降序 ,默认是按照升序排列的。表示要返回的第一行的偏移量,原创 2023-05-29 17:05:45 · 903 阅读 · 0 评论