Mysql
文章平均质量分 89
一枚务实的码农
IT码农一枚,分享一些自用的学习资料。
展开
-
MySQL索引15连问,抗住!
当查询的数据在索引树中,找不到的时候,需要回到主键索引树中去获取,这个过程叫做回表。比如在第6小节中,使用的查询SQL需要查询所有列的数据,idx_age普通索引不能满足,需要拿到主键id的值后,再回到id主键索引查找获取,这个过程就是回表。如果我们查询SQL的select * 修改为 select id, age的话,其实是不需要回表的。因为id和age的值,都在idx_age索引树的叶子节点上,这就涉及到覆盖索引的只是点了。原创 2023-03-08 22:00:28 · 2773 阅读 · 1 评论 -
MySQL 上亿大表如何优化?
现在已经知道了在慢查询中记录的 select arrival_record where 语句传入的参数字段有 product_id,receive_time,receive_spend_ms,还想知道对该表的访问有没有通过其他字段来过滤了。③根据最左前缀原则,select arrival_record 只用到了复合索引 IXFK_arrival_record 的第一个字段 product_id,而该字段选择性很差,导致扫描的行数很多,执行时间长。(记录被删除了,空间没有回收)原创 2023-03-02 18:21:27 · 348 阅读 · 0 评论 -
MySQL中的一些非常实用的函数、语法
执行完之后,就会将order_2022121820表创建好,并且将order表中的数据自动插入到新创建的order_2022121820中。但如果有大批量的数据需要插入,特别是是需要插入的数据来源于,另外一张表或者多张表的结果集中。通常情况下,我们在插入数据之前,一般会先查询一下,该数据是否存在。如果已存在,则不插入数据,而直接返回结果。但如果插入数据的请求,有一定的并发量,这种做法就可能会产生重复的数据。我们获取到该文件,然后执行相应的insert语句,就能创建相关的表,并且写入数据了,这就相当于。原创 2023-02-24 16:42:27 · 540 阅读 · 0 评论 -
MySQL 中的 distinct 和 group by 哪个效率更高?
但从Mysql8.0开始,Mysql就删除了隐式排序,所以,此时在语义相同,无索引的情况下,group by和distinct的执行效率也是近乎等价的。且由于distinct关键字会对所有字段生效,在进行复合业务处理时,group by的使用灵活性更高,group by能根据分组情况,对数据进行更为复杂的处理,例如通过having对数据进行过滤,或通过聚合函数对数据进行运算。两者的语法区别在于,group by可以进行单列去重,group by的原理是先对结果进行分组排序,然后返回每组中的第一条数据。原创 2023-02-16 17:13:47 · 556 阅读 · 0 评论 -
MySQL事务隔离级别
索引是MySQL的数据结构,关系着MySQL如何存储数据,查询数据;而如何操作数据,解决多线程时操作数据带来的问题,则需要通过事务来完成。InnoDB引擎支持事务,MyISAM引擎不支持事务。原创 2023-02-08 18:05:40 · 138 阅读 · 0 评论 -
Mysql数据结构选择的合理性
● B+树所有的关键字都出现在叶子结点中,叶子节点中会有指针,数据又是递增的,使得我们可以通过指针连接查找,而B树则需要通过中序遍历才能完成查找,效率低很多。1.B+树也是一种多路搜索树,基本B树做出了改进,主流的DBMS都支持B+Tree树的索引方式。● 非叶子节点仅用于索引,不保存数据记录,跟记录有关的信息都放在叶子节点中,而B树中,非叶子节点即保存索引,也保存数据记录。1.B树的英文是Balance Tree,也就是多路平衡查找树,树的分叉树越来越大,它的高度远小于二叉树,就需要把树瘦高变成矮胖。原创 2023-01-22 23:14:39 · 99 阅读 · 0 评论 -
Mysql B+树索引的推演
● 为了充分利用聚簇索引的聚簇特性,所以InnoDB表的主键列尽量选用有序的顺序ID,而不建议用无序的id,比如UUID、字符串等列作为主键无法保证数据的顺序增长。● 聚簇索引的叶子节点存储的就是我们的数据记录,非聚簇索引的叶子节点存储的是数据位置。聚簇索引并不是一种单独的索引类型,而是一种存储方式(所有的用户记录都存储在了叶子节点),也就是所谓的索引及数据,数据即索引。页(假如页b),这时插入的记录根据键值的大小就会被分配到页a或者页b中,而根节点变升级为存储目录项记录的页。原创 2023-01-22 23:12:13 · 69 阅读 · 0 评论 -
Mysql主从复制
从服务器为了与主服务器保持一致,要从主服务器读取二进制日志的内容,并且把读取到的信息写入本地的日志文件中,这就是中继日志。客户端提交commit后,通过配置从库的响应参数,保证至少有一个从库接收到了binlog,并写入到中继日志后,返回给客户端。3)Slave重做中继日志中的事件,将改变应用到自己的数据库中。进行主从同步的内容是二进制文件,它是一个文件,在进行网络传输的过程中就一定会产生延迟。● 然后从服务器读取中继日志,根据日志内容对数据进行更新,完成主从服务器的同步。ROW模式:基于行的复制。原创 2023-01-21 09:45:00 · 57 阅读 · 0 评论 -
Mysql的mvcc版本事务控制
● 对该记录每次更新后,都会将旧值放到一条undo日志中,就算是该记录的一个旧版本,随着更新次数的增多,所有的版本都会被roll_pointer属性连接成一个链表,称之为版本链,版本链头 节点就是当前记录最新的值。● 如果被访问版本的trx_id属性值小于ReadView中的low_limit_id值,表面生成该版本的事务在当前事务生成ReadView前已经提交,所以该版本可以被当前事务访问。它是系统最大的事务ID值,区别于正在活跃的事务。● 解决快照读的问题。原创 2023-01-21 10:15:00 · 275 阅读 · 0 评论