04 2018 档案
摘要:Mysql 系列文章主页 从 这篇 文章中,我们知道 Mysql 并发事务会引起更新丢失问题,解决办法是锁。所以本文将对锁(乐观锁、悲观锁)进行分析。 第一部分 悲观锁 1 概念(来自百科) 悲观锁,正如其名,它指的是对数据被外界(包括当前系统的其它事务,以及来自外部系统的事务处理)修改持保守态度,
        阅读全文
            
摘要:Mysql 系列文章主页 刚开始学习 Mysql 锁的时候,觉得 Mysql 使用的是行锁,再加上其默认的可重复读的隔离级别,那就应该能够自动解决并发事务更新的问题。可事实上,并不能解决! 可是,为什么不能解决呢? 带着问题,自己写了个简单Demo,来测试并分析其中道理: Demo 代码路径:htt
        阅读全文
            
摘要:Mysql 系列文章主页 1 准备数据 1.1 建表 1.2 插入数据 提示:这里插入了 id=1 & id=3 的两条记录,偏偏没有插入 id=2 的记录,这是为什么呢?后面会用到。 2 测试 2.1 准备 还是老规矩,两个会话(终端),左边是白色背景的,右边是黑色背景的,并且均设置 autoco
        阅读全文
            
摘要:Mysql 系列文章主页 Tips:在阅读本文前,最好先阅读 这篇(Mysql锁机制--行锁)文章~ 在上篇文章中,我们看到InnoDB默认的行锁可以使得操作不同行时不会产生相互影响、不会阻塞,从而很好的解决了多事务和并发的问题。但是,那得基于一个前提,即 Where 条件中使用上了索引;反之,如果
        阅读全文
            
摘要:Mysql 系列文章主页 1 准备数据 1.1 建表 注意:ENGINE 是 INNODB(因为 InnoDB 才支持行锁) 1.2 插入数据 2 测试 2.1 测试前准备 准备两个会话(终端、命令行),一个白色的(记为:左),一个黑色的(记为:右) 两个会话均设置 autocommit = 0 命
        阅读全文
            
摘要:Mysql 系列文章主页 1 准备数据 1.1 建表 1.1.1 建立 Employee表 1.1.2 建立 Department 表 1.1.3 注意:上述两张表的存储引擎都是 MyISam 1.2 插入数据 2 测试 2.1 给 Employee 表加上写锁 2.2 查询 Employee 表 
        阅读全文
            
摘要:Mysql 系列文章主页 1 概念 在 Java 程序中,当多线程并发访问某个资源的时候,如果有非线程安全的操作,那么需要通过加锁来保护之。同理,在 Mysql 中,如果也有多个线程、多个事务并发访问某些资源(比如写同一行记录)时,也需要锁来保护,以确保数据的正确性。 2 分类 从对数据的操作类型来
        阅读全文
            
摘要:Mysql 系列文章主页 1 准备数据 1.1 建表 1.1.1 建立 Employee表 1.1.2 建立 Department 表 1.1.3 注意:上述两张表的存储引擎都是 MyISam 1.2 插入数据 2 测试 2.1 给 Employee 表加上读锁 2.2 查询 Employee 表 
        阅读全文
            
摘要:Mysql 系列文章主页 默认没有开启慢查询日志功能。如果不是调优需要的话,一般不建议开启。 查看是否开启慢查询日志: 开启: 如果开启了此功能,那,什么样的Sql才会被记录到慢查询日志里面呢? 这是由参数 long_query_time 控制的,默认值 10秒,查看命令如下: 注意:是要严格大于 
        阅读全文
            
摘要:Mysql 系列文章主页 是Mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于Sql的调优的测量。默认情况下处于关闭状态,并保存最近 15 次的运行结果。 查看功能是否开启: 如果关闭,则需要开启: 1 准备数据 1.1 建表、函数、存储过程 执行 这篇(调用函数和存储过程批量插入
        阅读全文
            
摘要:Mysql 系列文章主页 1 建立 Employee 表 2 建立 Department 表 3 建立一个产生随机 N 位字符串的函数 4 建立一个产生 [1001, 1100] 数字的函数 5 相看函数是否创建成功 结果如下图: 6 建立批量插入 Employee 表的存储过程 7 建立批量插入 
        阅读全文
            
摘要:Mysql 系列文章主页 ORDER BY 子句,尽量使用 Index 查询,避免使用 FileSort 排序 尽可能在索引列上完成排序操作,遵照索引的最佳左前缀原则 1 准备数据 1.1 建表 1.2 插入数据 2 测试&Explain分析 2.1 创建索引 2.2 测试 Case#1: Case
        阅读全文
            
摘要:Mysql 系列文章主页 本文将以真实例子来讲解小表驱动大表(In,Exists区别) 1 准备数据 1.1 创建表、函数、存储过程 参照 这篇(调用函数和存储过程批量插入数据) 文章中的第 1-7 步,注意,不要执行第8步 1.2 插入数据 现在来执行第8步。 1.2.1 向 Department
        阅读全文
            
摘要:Mysql 系列文章主页 1 准备数据 1.1 建表 1.2 插入数据 2 测试&Explain分析 2.1 建立索引 2.2 测试 Case#1:用到一个索引(注意:key_len=31) Case#2:用到两个索引(注意:key_len=62) Case#3:用到三个索引(注意:key_len=
        阅读全文
            
摘要:Mysql 系列文章主页 1 准备数据 1.1 建表 1.2 插入数据 2 测试&Explain分析 2.1 创建索引 2.2 测试 结果:type=all,索引失效,全表扫描。 3 结论 OR连接时会索引失效
        阅读全文
            
摘要:Mysql 系列文章主页 1 准备数据 1.1 建表 1.2 插入数据 注意:此处的 name = '11223344',这是一个数字,但,也是一个字符串,对吧~ 2 测试&Explain分析 2.1 创建索引 2.2 测试 Case#1:有单引号 结果:type=ref,索引正常使用。 Case#
        阅读全文
            
摘要:Mysql 系列文章主页 1 准备数据 1.1 建表 1.2 插入数据 2 测试&Explain分析 2.1 有索引的情况下%的影响(提出问题) 2.1.1 建立索引 2.1.2 测试&Explain分析 Case#1:两边都是% 结果:type=all,全表扫描 Case#2:左边是% 结果:ty
        阅读全文
            
摘要:Mysql 系列文章主页 1 数据准备 1.1 建表 注意:name 字段上加了 NOT NULL 限制 1.2 插入数据 2 测试&Explain分析 2.1 建立索引 2.2 测试 Case#1:索引生效 分析:name 等于一个常量,当然能够使用索引 Case#2:索引失效(IS NULL) 
        阅读全文
            
摘要:Mysql 系列文章主页 1 准备数据 1.1 建表 1.2 插入数据 2 测试&Explain分析 2.1 创建索引 2.2 测试 Case#1: 注意:SELECT中使用了 'SELECT *' ,且Extra中是 'Using index condition' Case#2: 注意:SELEC
        阅读全文
            
摘要:Mysql 系列文章主页 1 准备数据 1.1 建表 1.2 插入数据 2 测试&Explain分析 2.1 创建索引 2.2 测试 Case#1:使用等于 结果:索引可以正常被使用 Case#2:使用不等于 结果:无法使用索引,全表扫描 3 结论 使用不等于的时候无法使用索引导致全表扫描
        阅读全文
            
摘要:Mysql 系列文章主页 1 准备数据 1.1 建表 1.2 插入数据 2 测试&Explain分析 2.1 创建索引 2.2 测试 Case#1:只有 name 且是等于 Case#2:name & age 且是等于 Case#3:name & age & pos 且是等于 Case#4:name
        阅读全文
            
摘要:Mysql 系列文章主页 最佳左前缀法则学习和Demo演示 1 准备数据 1.1 建表 1.2 插入数据 2 测试&Explain分析 2.1 创建索引 创建了一个基于 name, age, pos 三个字段的索引 2.2 索引测试 Case#1:只根据 name 字段来查询 结果: type=re
        阅读全文
            
摘要:Mysql 系列文章主页 1 准备数据 1.1 建表 1.2 插入数据 注意:此处的 name = '11223344',这是一个数字,但,也是一个字符串,对吧~ 2 测试&Explain分析 2.1 创建索引 2.2 测试 Case#1:使用了系统函数 Left 结果:没有使用索引,全表扫描 Ca
        阅读全文
            
摘要:Mysql 系列文章主页 两张表的索引优化,即两张表做关联查询 0 基于主键的关联查询 0.0 创建表;经典例子,员工和部门表 0.1 准备数据 0.2 查询 结果: 0.3 Explain分析 结果: 分析: employee 表的 type=all 是全表扫描,这是没法避免的,因为查询的(想要的
        阅读全文
            
摘要:Mysql 系列文章主页 一张表查询的索引优化 1 环境准备 1.1 创建文章表(类似于此处的博客): 1.2 插入两条数据: 1.3 需求:查询 category_id=1 且 comments>1 的情况下,views 最多的 author_id 2 实现 2.1 查询Sql: 2.2 执行结果
        阅读全文
            
摘要:Mysql 系列文章主页 1 索引是什么 Mysql官方对索引的定义:索引是帮助 Mysql 高效获取数据的数据结构。所以,索引的本质:索引是数据结构。索引的目的在于提高查询效率,可类比字典。 索引:排好序的快速查找数据结构 用于:排序 + 快速查找。注意,是两种功能。 数据本身之外,数据库还维护着
        阅读全文
            
摘要:Mysql 系列文章主页 1 准备数据 1.1 建立 Employee 表 1.2 建立 Department 表 2 再回顾一下数据 2.1 Employee表 2.2 Department表 3 测试 3.1 AB共有 图示说明: Sql查询: 结果: 3.2 左外连接 图示说明: Sql查询:
        阅读全文
            
摘要:Mysql 系列文章主页 查看 Mysql 支持的存储引擎: 查看当前数据库使用的存储引擎: 存储引擎主要有 MyISam & InnoDB,两者对比如下: 几点总结: 现在互联网公司用 InnoDB 更多 InnoDB 支持事务、支持行锁;而 MyISam 不支持事务、是表锁 InnoDB 适合高
        阅读全文
            
摘要:Mysql 系列文章主页 Mysql 的逻辑架构(网上搜索的两张图片) 和其它数据库相比,Mysql 有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要
        阅读全文
            
摘要:Mysql 现在是互联网公司中使用得非常广泛的数据库产品了,开源、免费、小巧、易用等诸多特性奠定了其夯实的基础。自己从事 JavaWeb 也有一段时间了,工作中也是用的 Mysql,也会涉及到分析、慢查询、调优等工作。于是,也需要学习 Mysql 高级部分的知识。 说来也巧,Mysql 高级在北京的
        阅读全文
            
摘要:Mysql 系列文章主页 0 介绍 0.1 是什么 使用 Explain 关键字可以模拟优化器执行 Sql 查询语句,从而知道 Mysql 是如何处理 Sql 的。 0.2 用法 Explain + Sql语句 0.3 执行计划包含的信息 如下图: 接下来,将对这 10 个表头中的字段一一进行说明。
        阅读全文
            
摘要:项目用的 Mybatis,今天改一个需求,落地实现是批量更新,且只需要根据主键(id)来更新一个字段(name)。 于是,没有犹豫,像下面这样设计了数据结构: 既然是批量更新,那外层肯定是 List List 中每个元素,只包含 id & name,于是,选择了用 org.apache.common
        阅读全文
            
 
                     
                    
                 
                    
                
 
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号