数据库技术

一、基本概念 概念一:单库 概念二:分片 分片解决“数据量太大”这一问题,也就是通常说的“水平切分”。 一旦引入分片,势必面临“数据路由”的新问题,数据到底要访问哪个库。路由规则通常有3种方法: (1)范围:range 优点:简单,容易扩展。 缺点:各库压力不均(新号段更活跃)。 (2)哈希:hash 优点:简单,数据均衡,负载均匀。 缺点:迁移麻烦(

2022-10-27  309
数据库技术

《MySQL死锁分析的两个工具》中,举了一个强制类型转换导致死锁的例子,有朋友询问是不是类型转换都不能命中索引,花1分钟细说一下。 第一类:“列类型”与“where值类型”不符,不能命中索引,会导致全表扫描(full table scan)。 数据准备: createtablet1( cellvarchar(3)primarykey )engine=innodbdefaultcharset=

2022-10-27  283
数据库技术

《迅猛定位低效SQL?》留了一个尾巴: selectid,namewherename='shenjian' selectid,name,sexwherename='shenjian' 多查询了一个属性,为何检索过程完全不同? 什么是回表查询? 什么是索引覆盖? 如何实现索引覆盖? 哪些场景,可以利用索引覆盖来优化SQL? 这些,这是今天要分享的内容。 画外音:本文试验基于MySQL5.6-InnoDB。 一、什么是回表查询?

2022-10-27  255
数据库技术

《两个工具分析SQL死锁》 《SQL空值带来的大坑》 两个案例分析,展现了MySQL性能分析工具explain的强大。 《同一个SQL语句,为啥性能差异咋就这么大呢?》 详细叙述了explain结果中最重要的type字段(连接类型)的含义。 其实,explain结果中还有一个Extra字段,对分析与优化SQL有很大的帮助,今天花1分钟简单和大家聊一聊。 数据准备: createtableuser( idintprimarykey,

2022-10-27  314
数据库技术

数据库死锁,是最难调试与追踪的。 场景如下: 同一个表,事务内先插入一条记录,再更新这条记录,并发时会死锁。 并且能够复现。 可以通过什么工具模拟并发事务,查看信息,解决问题呢?这是今天要分享的内容。 一、前置准备 setsessiontransactionisolationlevelrepeatableread; setsessionautocommit=0; createtablet( idint(20)primarykeyAU

2022-10-27  303
数据库技术

本次分享将介绍如何在Python中使用Pandas库实现MySQL数据库的读写。首先我们需要了解点ORM方面的知识。 ORM技术 对象关系映射技术,即ORM(Object-Relational Mapping)技术,指的是把关系数据库的表结构映射到对象上,通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。 在Python中,最有名的ORM框架是SQLAlchemy。Java中典型的ORM中间件有: Hibe

2022-10-27  286
数据库技术

大家都知道,slow query系统做的好不好,直接决定了解决slow query的效率问题。 一个数据库管理平台,拥有一个好的slow query系统,基本上就拥有了解锁性能问题的钥匙。 但是今天主要分享的并不是平台,而是在平台中看到的奇葩指数五颗星的slow issue。 好了,关子卖完了,直接进入正题: 一、症状 一堆如下慢查询 #User@Host:cra[cra]@[xx]Id:3352884621 #Query_time

2022-10-27  302
数据库技术

MySQL主从复制,读写分离是互联网常见的数据库架构,该架构最令人诟病的地方就是,在数据量较大并发量较大的场景下,主从延时会比较严重。 为什么主从延时这么大? 答:MySQL使用单线程重放RelayLog。 应该怎么优化,缩短重放时间? 答:多线程并行重放RelayLog可以缩短时间。 多线程并行重放RelayLog有什么问题? 答:需要考虑如何分割RelayLog,才能够让多个数据库实例,多个线程并行重放RelayLog,不会出现

2022-10-27  302
数据库技术

《数据库索引,到底是什么做的?》介绍了B+树,它是一种非常适合用来做数据库索引的数据结构: (1)很适合磁盘存储,能够充分利用局部性原理,磁盘预读; (2)很低的树高度,能够存储大量数据; (3)索引本身占用的内存很小; (4)能够很好的支持单点查询,范围查询,有序性查询; 数据库的索引分为主键索引(Primary Inkex)与普通索引(Secondary Index)。InnoDB和MyISAM是怎么利用B+树来实现这两类索引,其又有

2022-10-27  299
数据库技术

前言 我们在开发一个复杂的系统时可能经常出现这样的场景:比如,A函数中调用了B函数,而A函数和B函数同时都使用了事务,这样就出现了事务嵌套。在MySQL的官方文档中有明确的说明MySQL是不支持嵌套事务的: Transactions cannot be nested. This is a consequence of the implicit commit performed for any current transaction wh

2022-10-27  309