![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
文章平均质量分 56
Amos H
这个作者很懒,什么都没留下…
展开
-
MySQL中的多版本并发控制
基于提高并发性能的考虑,MySQL中大多数事务型存储引擎实现的都不是简单的行级锁,一般都同时实现了多版本并发控制(MVCC) 可以将多版本并发控制视为行级锁的一个变种,但是在很多情况下,它都能避免了加锁操作,因此开销更低。虽然实现机制有所不同,但是大都实现了非阻塞式的读操作,写操作也只锁定了必要的行。 &nbs...原创 2018-10-31 21:08:55 · 1911 阅读 · 1 评论 -
MySQL数据库中的四种隔离级别
事务的隔离性比想象的要复杂,在 SQL 标准中定义了四种级别的隔离级别。通常而言,较低级别的隔离通常可以执行更高的并发,系统的开销也更低READ UNCOMMITTED该级别为未提交读。在该级别中,事务中的修改即使没有提交,对其他事务也都是可见的。事务可以读取未提交的数据,这也被称为脏读。这个级别会导致很多的问题,从性能上来说,它不会比其他级别好太多,但缺乏其他级别的很多好处。除非真的有非...原创 2019-01-29 16:15:00 · 194 阅读 · 0 评论 -
MySQL 字符集和校对
字符集是指一种从二进制编码到某类字符符号的映射,校对是一组用于某个字符集的排序规则。每一类编码字符都有其对应的字符集和校对规则原创 2019-01-20 11:09:48 · 193 阅读 · 0 评论 -
MySQL高级特性——绑定变量
从MySQL 4.1 版本开始,就支持服务器端的绑定变量,这大大提高了客户端和服务器端数据传输的效率介绍当创建一个绑定变量 SQL 时,客户端会向服务器发送一个SQL语句的原型。服务器端收到这个SQL语句框架后,解析并存储这个SQL语句的部分执行计划,返回个客户端一个 SQL 语句处理句柄。以后每次执行这类查询,客户端都指定使用这个句柄。绑定变量的SQL,使用问号标记可以接受参数的位置,...原创 2019-01-19 14:51:58 · 788 阅读 · 0 评论 -
MySQL优化COUNT()查询
COUNT()聚合函数,以及如何优化使用了该函数的查询,很可能是最容易被人们误解的知识点之一COUNT()的作用COUNT()是一个特殊的函数,有两种非常不同的作用:统计某个列值的数量统计行数统计列值在统计列值时,要求列值是非空的,即不统计NULL。如果在COUNT()的括号中指定了列或者列的表达式,则统计的就是这个表达式有值的结果数。统计结果集的行数当MySQL确认括号内...原创 2019-01-14 11:57:21 · 483 阅读 · 0 评论 -
让MySQL查询更加高效——对查询进行重构
在优化有问题的查询时,目标应该是找到一个更优的方法获得实际需要的结果,而不是一定总是要求从MySQL获取一模一样的结果集原创 2019-01-07 21:45:34 · 269 阅读 · 0 评论 -
MySQL高级特性之分区表
对于用户而言,分区表是一个独立的逻辑表,但是在底层由多个物理子表组成。实现分区的代码实际上是对一组底层表的句柄对象的封装,对分区表的请求都会通过句柄对象转化成对存储引擎的接口调用意义MySQL在创建表的时候可以通过使用 PARTITION BY 子句定义每个分区存放的数据。在执行查询的时候,优化器根据分区定义过滤那些没有我们需要的数据的分区,这样查询就可以无需扫描所有分区——只需要查找包含...原创 2019-01-17 15:03:36 · 268 阅读 · 0 评论 -
MySQL查询执行的基础——查询优化处理
查询的生命周期的下一步是将一个SQL转换成一个可执行计划,MySQL再按照这个计划和存储引擎进行交互语法解析器和预处理首先,MySQL通过关键词将SQL语句进行解析,并生成一颗对应的“解析树”。MySQL解析器将使用MySQL语法规则验证和解析查询。比如是否使用了错误的关键字,关键字的顺序是否正确,或者引号是否能够正确的前后匹配。预处理器则会根据一些MySQL规则进一步检查解析树是否合法...原创 2019-01-11 17:37:19 · 168 阅读 · 0 评论 -
MySQL优化特定类型的查询
优化关联查询如果想要优化使用关联的查询,我们需要特别留意以下几点:确保ON或者USING子句中的列上有索引。在创建索引的时候需要考虑到关联的顺序。当表A和表B用列c关联的时候,如果优化器的关联顺序是B、A,那么就不需要在B表的对应列上建索引。除非有其他理由,否则只需要在关联顺序的第二个表的对应列上创建索引,没有用的索引只会带来额外的负担。确保任何的GROUP BY 和 ORDER BY 中...原创 2019-01-17 10:14:04 · 115 阅读 · 0 评论 -
MySQL中冗余和重复索引的区别
MySQL允许在单个列上创建多个索引,无论是有意还是无意,MySQL需要单独维护这些重复索引,优化器在优化查询时也需要逐个考虑这会影响MySQL的性能概念阐述重复索引: 在相同的列上按照相同的顺序创建的相同类型的索引。应该避免创建这样的重复索引,发现之后也应该立即移除。冗余索引: 两个索引按照相同的顺序覆盖了相同的列。创建的原因一般来说,我们有时候会在不经意间创建了重复索引,例如下面...原创 2019-01-02 12:07:10 · 1274 阅读 · 0 评论 -
慢查询基础:优化数据访问
查询性能低下最基本的原因是访问的数据太多。某些查询不可避免的需要筛选大量数据,但这并不常见。大部分性能低下的查询都可以通过减少访问的数据量的方式进行优化对于低效的查询,可以通过下面两个步骤进行分析:确认应用程序是否在检索大量超过需要的数据。这通常意味着访问了太多的行,但有时候也可能是访问了太多的列确认MySQL服务器层是否在分析大量超过需要的数据行是否向数据库请求了不需要的数据有...原创 2019-01-05 19:12:28 · 273 阅读 · 0 评论 -
MySQL中InnoDB和MyISAM引擎的区别
直到MySQL5.5之前,MySQL的默认殷勤都是MyISAM。随着新版本的发布,InnoDB成功上位,成为MySQL的默认引擎。这两种引擎的使用都非常广泛,那么它们有什么区别和联系简短介绍InnoDB: 默认的事务型引擎,是最重要也是使用最广泛的存储引擎。可以用来处理大量的短期事务,具有优秀的性能以及自动崩溃回复特性。MyISAM: 非事务型引擎,提供了大量的特性,包括全文索引、压缩...原创 2019-01-01 16:56:46 · 1084 阅读 · 0 评论 -
MySQL查询执行的基础
当我们希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的。一旦理解了这一点,很多查询优化工作实际上就是遵循一些原则让优化器能够按照预想的合理方式运行当我们想向MySQL发送了一个请求时,MySQL到底做了什么:客户端首先发送一条查询请求给服务器服务器首先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果,否则进入下一阶段。服务器端...原创 2019-01-10 17:01:38 · 384 阅读 · 0 评论 -
使用存储过程在MySQL中创建大量测试用数据
在日常的学习工作中,我们常常需要为数据库创建一些测试用数据方便我们测试数据库的性能。一条条插入显然效率低下,在这里我们需要使用存储过程存储过程简单来说就是为以后的使用而保存的一条或者多条MySQL语句的集合。可以将其视为批处理文件,但是它们的作用不仅限于批处理。首先使用命令查看创建样例表的SQL语句:SHOW CREATE TABLE tablename;以下是创建样例表的SQL语句...原创 2018-11-28 17:37:04 · 250 阅读 · 0 评论 -
Redis 过期键删除策略
Redis 中数据库键的过期时间都保存在过期字典中,当一个键过期了,Redis 存在三种不同的删除策略:定时删除、惰性删除和定期删除定时删除定义在设置键的过期时间的同时创建一个计时器,让定时器在键过期时间来临时,立即执行对键的删除操作。定时删除策略对内存是最友好的:通过使用定时器,定时删除策略可以保证过期键会尽快被删除,并且释放过期键所占用的内存。但是另一方面,它对 CPU 时间是嘴...原创 2019-02-25 20:29:16 · 486 阅读 · 0 评论