![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
文章平均质量分 91
三水写代码
你只管努力变得优秀······
展开
-
MYSQL JSON数据操作
mysql JSON函数原创 2021-11-29 16:26:41 · 1770 阅读 · 0 评论 -
Mysql replace into 和 update or insert
在用mysql做批量数据同步时, 经常会遇到的一种情况是: 批量获取的数据, 有些需要新增,有些需要修改。 mysql对此提供了两种解决方案REPLACE INTO代替 INSERT INTO INSERT ...ON DUPLICATE KEY UPDATE ...这两种方案, 都需要有主键或唯一索引, 当主键或唯一索引存在冲突时, 会执行修改数据,否则会插入数据。 下面我们具体看一下两种方案。首先我们先创建表和索引:show create table person; -- 查看...原创 2021-10-12 18:41:38 · 2664 阅读 · 1 评论 -
Mysql 锁
部分内容摘录自博客:正确的理解MySQL中让你想到就烦的各种锁 (一)锁分类:1、按照操作粒度划分:表级锁: 每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低 行级锁:每次操作锁住一行数据。锁定粒度最小,发生锁冲突概率最低,并发度最高 记录锁(RECORD):锁定单个行记录(索引记录),普通认知上的行锁(RR、RC隔离级别) 间隙锁(GAP):锁定索引记录间隙,确保索引记录间隙不变(RR 隔离级别) 临键锁(NEXT-KEY):记录锁和间隙锁的组合,锁住数据的同时..原创 2021-09-28 17:44:19 · 616 阅读 · 0 评论 -
MySQL MVCC实现原理
什么是MVCC:MVCC 全名Multi Version Concurrency Control 多版本控制, 是指在数据库中为了实现高并发的数据访问,对数据进行多版本处理,并通过事务的可见性来保证事务能看到自己应该看到的数据版本。MVCC 在MySQL Innodb中的实现主要是为了提高数据库的并发性,更好的处理读写冲突问题。MVCC中的几个概念:当前读:读取的是最新版本的数据,且读取是其它并发事务不能修改当前记录,需要对读操作进行加锁。如: select lock in share mo原创 2021-09-27 19:02:28 · 686 阅读 · 0 评论 -
MYSQL 事务ACID与日志关系
事务相关特性回顾:事务的四个特性: ACIDAtomicity: 原子性,一个事务包含多个操作,要么完全执行所有部分,要么不执行任何操作。如果执行过程发生意外错误,应该支持回滚操作。 Consistency: 一致性,数据库操作前后应该保持某个特征不变 Isolation: 隔离性,事务提交之前,相关数据不能被其他事务访问 Durability: 持久性,事务提交后,修改将被永久保存于数据库中事务的隔离级别:脏读: 实时读取其他事务未提交的数据,数据随时可能会发生修改 不可重复读:..原创 2021-09-27 09:51:59 · 467 阅读 · 0 评论 -
Mysql系统文件--日志文件、数据文件
系统文件包数据文件、配置文件、pid进程文件、socket网络链接文件,这些文件都可以理解为日志文件。日志文件分类:错误日志(error log) : 记录mysql服务的启停时正确和错误的信息,还记录启动、停止、运行过程中的错误信息。默认开启, 查看命令 --- show variables like '%log_error%' 通用查询日志(general query log) : 记录一般查询语句, 查看命令 --- show variables like '%general%' 中继..原创 2021-09-26 11:30:50 · 2115 阅读 · 0 评论 -
Mysql优化(7):优化特定类型查询
1、优化关联查询优化关联查询,需要了解Mysql关联查询的执行逻辑,这点我们在mysql查询优化器一文中有说明,想要了解的同学可以去看看,这里我们简单补充一下关联查询需要注意的几点:确保on或using子句中的列上有索引。在创建索引的时候要考虑到关联的顺序,当表A和表B用列c关联的时候,如果优化器的关联顺序是B、A ,那么就不需要在B表的对应列上创建索引,只要在A上c列创建索引。除非有其他需要,否则只需要在关联顺序的第二个表的对应列上创建索引。多余的索引会只会带来额外的负担。 确保任何的GROU.原创 2020-09-23 16:38:08 · 262 阅读 · 0 评论 -
Mysql查询优化器的局限性
Mysql的万能“嵌套循环”并不是对每种查询都是最优的,对少部分查询不适用。所以需要我们通过改写Mysql高效的完成工作。且在Mysql5.6版本正式发布后,会消除很多Mysql原本的限制,让更多查询能够尽可能高效的完成。1、关联子查询Mysql的子查询实现非常糟糕,特别是where条件中有in()的嵌套子查询,如:select * from film where film_id in ( select film_id from dilm_actor where actor_id =原创 2020-09-23 13:43:08 · 260 阅读 · 0 评论 -
mysql查询优化器
查询优化器是mysql中非常重要且复杂的部件,mysql优化器优化策略分为静态优化和动态优化:静态优化可以直接对解析树进行分析并完成优化,不依赖于特别的数值,依次完成后就一直有效,如通过简单的代数变换将where条件转换成另一种等价形式; 动态优化和查询的上下文有关,也可能和多种其他因素有关,如where条件的取值、索引中条目对应数据行数等,它需要每次在查询的时候进行评估,可以理解为 “运行时优化”。mysql能处理到的优化类型:重新定义关联表顺序:数据表的关联不会总是按照在查询中指定顺序进行,关联原创 2020-09-22 20:44:20 · 707 阅读 · 0 评论 -
mysq优化(6):了解mysql执行的基础
如果我们希望mysql能以更高的性能运行查询,我们就需要了解mysql是如何优化和执行查询的。如此我们在实际的查询优化工作上就能遵循一些原则让优化器能够按照预想的合理的方式运行。下面我们看看mysql执行一个查询的真实过程: 客户端发送查询语句给服务器 服务器先检查缓存,如果缓存命中,则返回缓存结果,否则进入下一阶段 服务器进行sql解析、预处理,再由优化器生成对应的执行计划 mysql根据优化器生成的执行计划,调用存储引擎的API来执行查询 将结果返回给客原创 2020-09-21 14:59:53 · 215 阅读 · 0 评论 -
mysql优化(5):索引优化
创建合理地索引能够提升数据库的查询效率,但是如果创建的索引不合理,不仅会降低数据库的插入、修改、删除的效率,而且会降低数据库的查询效率。其中最主要的是组合索引的创建和优化。1、冗余和重复的索引mysql允许在相同的列上创建多个索引,无论索引是否有实际的意义。且索引一旦被创建,就需要mysql单独维护重复的索引,且mysql优化器在优化查询的时候也需要对重复的索引重复进行计算,这样会影响mysql的性能。重复的索引一般是指在相同的列上安装相同的顺序创建的相同类型的索引。冗余的索引一般是因为存在原创 2020-09-18 17:00:40 · 269 阅读 · 0 评论 -
mysql优化(4):sql优化小技巧
这里对SQL优化做一下简单的总结:对查询进行优化,要尽量避免全表扫描,首先应该考虑在where和order by 涉及的列上建立索引 避免在where子句中对字段进行null值判断,否则将导致引擎弃用索引而进行全表扫描 避免在where子句中使用 != 或 <> ,否则引擎将进行全表扫描 避免where子句中使用or连接条件,若果一个字段有索引,一个字段没有索引,引擎将会进行全表扫描 in 和 not in 也要慎用,他们也会导致全表扫描;对于连续的数据,尽量使用between a.原创 2020-06-27 20:58:20 · 221 阅读 · 0 评论 -
mysql数据类型
MySQL支持的数据类型,大致可以分为三类:数值型 日期/时间 字符类型数值类型:MySQL支持所有标准SQL数值数据类型:类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 byte (-128,127) (0,255) 小整数值 SMALLINT 2 bytes (-32 768,32 767) (0,65 535) 大整数值 MEDIUMINT 3 bytes (-8 .原创 2020-06-26 14:40:01 · 181 阅读 · 0 评论 -
mysql优化(3):索引的使用
什么是索引:利用关键字,记录部分数据(某个字段、某些字段、某个字段的一部分),建立与记录位置的对应关系,就是索引。索引的优缺点和使用基本原则:优点:所有的mysql字段类型都可以索引,也就是可以给任意字段设置索引 加快查询速度缺点:创建索引和维护索引要耗费时间,且数据量越大,消耗的时间就越多 索引也要占用空间,如果我们又大量索引,索引文件会比数据文件更快到达数据容量的上限值 对表中的数据进行增删改操作时,索引也要进行动态维护,降低了数据的处理速度使用基本原则:对经常更新的表原创 2020-06-26 13:11:18 · 290 阅读 · 0 评论 -
mysql优化(2):执行计划Explain
SQL执行计划,记录一条SQL语句在数据库中执行时,一步步都做了什么。explain 可以帮助我们在不真正执行某个sql语句时,就执行mysql怎样执行,这样方便我们去分析sql指令,进行SQL优化。查看SQL语句的执行计划:explain select * from work_order_reply;或desc select * from work_order_reply; 输出结果:执行计划输出的信息有:id、select_type、table、partitions、type、原创 2020-06-25 16:06:23 · 382 阅读 · 0 评论 -
mysql表空间---共享表空间、独立表空间
使用InnoDB存储引擎时,需要了解独立表空间和共享表空间。独立表空间:每个表会生成独立的文件来存储数据。每个表都有一个.frm的描述文件存放表结构,还有一个.idb文件存放表索引。优点:每个表都有自己的独立表空间; 每个表的数据和索引都会存储在各个表空间中; 可以实现单表在不同的数据进行迁移; 表空间可以回收(删除表时); 不论如何删除,表空间碎片不会太严重。缺点:单表增长过大时,如超过100G,表查询会比较慢共享表空间:数据库中的所有表数据、索引数据都放在同一个文件中原创 2020-06-24 17:02:28 · 891 阅读 · 0 评论 -
mysql优化(1):mysql存储引擎
存储引擎是mysql用来存储数据的一种特定的文件结构,不同的存储引擎对数据的查询、增删的效率不同。在mysql中存储引擎是以插件的形式运行的。mysql5之后,支持的存储引擎有多种,但是我们常用的存储引擎主要有三种,且默认使用的存储引擎是InnoDB。创建表时指定存储引擎: create table tableName () engine=innodb; 指定innodb为表的存储引擎。下面我们先来对比一下InnoDB、MyISAM、MEMORY三种常用的存储引擎之间的差别。功能 ..原创 2020-06-24 11:52:25 · 244 阅读 · 0 评论