随笔分类 - mysql
mysql数据库
摘要:InnoDB有7种锁: 自增锁 特殊的表级别锁,针对事务插入auto_increment类型的列。保证数据一致性,即使是事务A正在插入数据,事务B的插入也要等待,保证事务AB插入的行是连续的字段值。 共享/排他锁 行级别锁,事务拿到某行的共享S锁才可读取该行,事务拿到某行的排他X锁,才可以修改或删除
阅读全文
摘要:1、explain执行计划中的 key_len 的计算规则: 一般key_len等于索引列字节长度,如int为4个字节,bigint为8个字节。 字符串需要考虑字符集因素。如char(30) utf8的key_len至少是90个字节。 类型为null,key_len需要加多1个字节。 类型为可变类型
阅读全文
摘要:MySQL 8.0 的五个新特性: 隐藏索引 该特性对性能调试非常有用,索引可以被「隐藏」和「显示」,当一个索引隐藏时,它不会被查询优化器使用。我们可以观察隐藏索引对数据库的影响来看这个索引是否有用的。 注意:隐藏索引时,索引内容和正常索引一样会实时更新,会跟其他索引那样影响插入、更新和删除时的性能
阅读全文
摘要:数据治理的目标: 实现企业数据的标准化 提高数据质量 提升业务处理的效率 为数据分析提供准确的数据支撑 助力企业实现数字化转型 为什么要数据治理: 业务的数据质量问题较多,无法提供准确的数据报表而影响了业务效率,无法支撑企业的数字化转型等原因。 如何实现数据治理? 分析业务问题,找到企业核心业务诉求
阅读全文
摘要:临时表,是临时使用的一张表。有两种临时表: 本地临时表:只能在当前查询页面使用,新开查询不能使用它。 在表名前加#即可得本地临时表。eg: select TOP 10 * into #temp from table1; select * from #temp; 如果新开一个页面重新执行该句 sele
阅读全文
摘要:在创建索引的时候需要选择索引类型是hash还是Btree,对于两种索引类型的区别一直存在疑惑,因此今天找了些资料解答一下自己。 Hash索引与Btree索引的区别: hash索引:将索引键经过hash运算之后得出hash值和对应的行指针存放于一个hash表中。 检索效率非常高,可以一次定位。 仅能满
阅读全文
摘要:ES是海量数据查询的搜索引擎,广泛用于全文检索、日志分析、监控分析等场景。 ES有三个特点 轻松支持各种复杂的查询条件:分布式实时文件存储,采用倒排索引及自定义打分、排序能力与丰富的分词插件等,实现复杂查询条件的全文检索需求。 可扩展性强:天然支持分布式存储,可简单实现上千台服务器的分布式横向火绒。
阅读全文
摘要:在处理大数据量时可以将mysql读写分离以达到提高性能、缓解数据库压力、缓解服务器压力的目的。 什么是读写分离? 基本原理为主库处理事务型查询,从库处理select查询。数据库复制把事务型查询导致的变更同步到从库中。 读写分离的好处: 增加冗余 增加机器的处理能力 确保写的服务器压力小。 为什么读写
阅读全文
摘要:使用left join 时,on和where的条件的区别如下 on条件是在生成临时表时使用的条件,不管on中的条件是否为真,都会返回左表中的记录。 where条件是在临时表生成好后,在对临时表进行过滤条件,条件不为真的就全部过滤。 案例: select * from tab1 left join t
阅读全文
摘要:什么是触发器? 触发器是一种特殊的存储过程,它在insert、delete、update时触发执行,它比数据库本身标准的功能有更精细和复杂的数据控制能力。 触发器的作用: 在写入表前可强制检验或转换数据 触发器发生错误时,异动的结果会被撤销 可依照特定情况,替换异动的指令(instead of) 在
阅读全文
摘要:mysql 可以运行在不同的 SQL Mode模式下,不同的SQL Mode定义了不同的SQL语法,有不同的数据校验规则。 SQL Mode的作用: 不同的mode可以完成不同严格程度的数据校验,保障数据的准确性。 改变mode能够更方便的进行数据在不同库中的迁移。 SQL Mode的种类: ONL
阅读全文
摘要:A、B两列均存在索引,但 select * from T where A=B;不会走索引,因为全表扫描更快。 存在null值,索引列可空,则不会给其建索引,索引值少于表count值,执行计划会去扫全表,比如 select * from T where id is not null; 反查询,索引定位
阅读全文
摘要:null可以通过一个具体值表示,这样有利于代码可读性和维护性,且能增强业务数据的规范性。 null值更新为非null,无法原地更新,容易发生索引分裂,从而影响性能。 not in、!=等条件查询在有null值的情况下返回为空结果,查询易出错。 null列需要更多的存储空间,需要一个额外的字节为nul
阅读全文
摘要:Mylsam Mylsam的索引与行记录是分开存储的,都是非聚集索引。 其主键索引与普通索引没有本质区别:①有个连续聚集的区域单独存储行记录;②主键索引的叶子结点,存储主键与对应行记录的指针;③普通索引的叶子结点,存储索引列与对应行记录的指针。 Mylsam表可以没有主键 主键索引与普通索引都是两棵
阅读全文
摘要:mysql 有三种类型的锁 表锁:开销小,加锁快,不会出现死锁 指对一整张表加锁,一般是DDL处理时使用(比如Alter)。 由Mysql Server实现,使用的是一次性锁技术,会话开始时使用lock命令将后需要用到的表加锁,后面通过unlock tables释放锁。 行锁:开销大,加锁慢,会出现
阅读全文
摘要:sql与nosql数据库的选择,考虑以下几个指标: 数据量 并发量 实时性 一致性要求 读写分离 安全性 运维性 根据这些个指标,软件系统可分为 管理型系统:运营类系统,sql 大流量系统:字段多、数据量增长块,nosql 日志型系统:es 搜索型系统:es 事务型系统:sql+缓存redis 离线
阅读全文
摘要:MongoDB: MongoDB是非关系型数据库(NoSql),属于文档型数据库,最大的特点是no-schema,可以存储和读取任意的数据,存储的格式是json。以json格式存进MongoDB后,即使读取一个json中不存在的字段也不会出现SQL般的语法错误。 优点: 新增字段不出错,易拓展 查询
阅读全文
摘要:不推荐使用子查询和join的原因总结: 子查询和join的效率是硬伤,一旦数据量大效率很难保证。 执行子查询时,mysql需要创建临时表,查询完毕再删除这些临时表,所以子查询的速度会收到一定影响。 join查询走嵌套查询,小表驱动大表。 join查询,DB承担的业务压力大,当表百万级别时,join导
阅读全文
摘要:一直对InnoDB的行格式不太了解,于是找了几篇文章看了一下,总结一下 什么是行格式? 我们平时以记录为单位向表中插入数据,这些记录在磁盘上的存放方式被称为「行格式」或「记录格式」。 行格式的应用是针对于表的,只有创建表的时候使用行格式,在创建库或插入数据的时候无法选择行格式。 表的行格式决定了这张
阅读全文