MySQL
yongqi_wang
少点悲伤,多点微笑。少些埋怨,多些鼓励。
展开
-
MySQL按周分组查询函数yearweek
可用于按周统计数据的相关需求,返回0~53周用法 : yearweek(date,[mode]),mode可选填,默认为以周日为当前周的第一天可选参数:Mode First day of week Range Week 1 is the first week … 0 Sunday 0-53 with a Sunday in this ...原创 2020-01-14 10:43:05 · 580 阅读 · 0 评论 -
MySQL优化二:如何创建高性能索引之高性能的索引策略
正确的创建和使用索引是实现高性能查询的基础。前面已经介绍了各种类型的索引及其对应的优缺点。现在我们一起来看看如果真正的发挥这些索引的优势。高效的选择和使用索引有很多种方式,其中有些是针对特殊案例的优化方法,有些则是针对特定行为的优化。使用哪个索引,以及如何评估选择不同索引的性能影响的技巧则需要持续不断的学习。一 独立的列我们通常会看到一些查询不当的使用索引,或者使得MySQL无法使用已...原创 2019-01-14 19:10:25 · 724 阅读 · 0 评论 -
MySQL优化一:数据类型优化
良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要执行的查询语句来设计Schema,这往往需要权衡各种因素。例如,反范式的设计可以加快某些类型的查询,但同时可能使另一些类型的查询变慢。比如添加技术表和汇总表时一种很好的优化查询的方式,但这些表的维护成本可能会很高。MySQL独有的特性和实现细节对性能的影响也很大。选择优化的数据类型MySQL支持的数据类型非常多,选择正确的数据类型对于...原创 2019-01-09 18:02:43 · 956 阅读 · 0 评论 -
MySQL优化三:查询性能优化之优化特定类型的查询
1 优化count()查询count()聚合函数,以及如何优化使用了该函数的查询,很可能是MySQL中最容易被误解的前10个话题之一。网上随便搜搜就能看到很多错误的理解。在优化之前,先来看看count()函数的真正作用是什么。count()的作用count()是一个特殊的函数,有两种非常不同的作用:它可以统计某个列值的数量,也可以统计行数。在统计列值时要求列值时非空的,并不统计nu...原创 2019-01-21 11:44:12 · 747 阅读 · 2 评论 -
MySQL优化三:查询性能优化之基础部分
前面文章中介绍了如何设计最优的库表结构、如何建立最好的索引,这些对于高性能来说是比不可少的。但这些还不够;还需要合理的设计查询。如果查询写得很糟糕,即使库表结构在合理、索引在合适,也无法实现高性能。查询优化、索引优化、库表结构优化需要齐头并进。下面我们一起来理解MySQL如何真正执行查询,并明白高效和低效的原因何在,这样能充分发挥MySQL的优势,并避开弱点。一 为什么查询速度会慢在尝...原创 2019-01-16 18:58:40 · 717 阅读 · 1 评论 -
MySQL高级特性一:分区表
对用户来说,分区表时一个独立的罗技表,但是底层由多个无力字表组成。实现分区的代码实际上是对一组底层表的句柄对象的封装。对分区表的请求,都会通过句柄对象转化成对存储引擎的接口调用。所以分区对于SQL层来说是一个完全封装底层实现的黑盒子,对应用是透明的,但是从底层的文件系统来看就很容易发现,每一个分区表都有一个使用#分隔明明的表文件。MySQL实现分区表的方式;对底层表的封装,意味着索引也是按照分...原创 2019-01-22 17:31:26 · 34648 阅读 · 11 评论 -
MySQL高级特性三:在MySQL内部存储代码
MySQL允许通过触发器、存储过程、函数的形式来存储代码。从MySQL5.1开始,还可以在定时任务中存放代码,这个定时任务也被称为事件。存储过程和存储函数都被同城为存储程序。这四种存储代码都使用特殊的sql语句扩展,它包含了很多过程处理语法,例如循环和条件分支等。不同类型的存储代码的主要却别在于其执行的上下文;也就是其输入和输出。存储过程和存储函数都可以接受参数然后返回值,但是触发器和事件却不...原创 2019-02-01 11:31:07 · 1240 阅读 · 0 评论 -
MySQL高级特性四:查询缓存
很多数据库产品都能够缓存查询的执行计划,对于相同类型的SQL就可以跳过SQL解析和执行计划生成截断。MySQL在某些场景下也可以实现,但是MySQL还有另一种不同的缓存类型:缓存完整的select查询结果,也就是查询缓存。MySQL查询缓存保存查询返回的完整结果。当查询命中该缓存,MySQL会like返回结果,跳过了解析、优化和执行截断。查询缓存系统会跟踪查询中涉及的每个表,如果这些表发生...原创 2019-02-02 13:16:17 · 12774 阅读 · 9 评论 -
MySQL高级特性二:视图
MySQL5.0版本以后开始引入视图。视图本身是一个虚拟表,不存放任何数据。在使用SQL语句访问视图的时候,它返回的数据是MySQL、从其他表中生成的。视图和表是在同一个命名空间,MySQL在很多地方对于视图和表时同样对待的。不过视图和表也有不同,例如,不能对视图创建触发器,也不能使用drop taable命令删除视图。在MySQL官方手册中对如何创建和使用视图有详细的介绍,下面主要介绍视...原创 2019-01-23 17:40:25 · 606 阅读 · 0 评论 -
MySQL优化二:如何创建高性能索引之索引的优点
索引可以让服务器快速的定位到表的指定位置。但是这并不是索引的唯一作用,到目前位置可以看到,根据创建索引的数据结构不同,索引页有一些其他的附加作用。最常见的B-Tree索引,按照顺序存储数据,所以MySQL可以用来做order by和group by 操作。因为数据是有序的,所以B-Tree也就会将相关的列值都存储在一起。最后,因为索引中村吃醋了实际的列值,所以某些查询只使用索引就能够完成全部查...原创 2019-01-13 00:00:15 · 331 阅读 · 0 评论 -
MySQL优化三:查询性能优化之查询优化器的局限性与提示
MySQL的万能嵌套循环并不是对每种查询都是最优的。不过MySQL查询优化器只对少部分查询不适用,而且我们往往可以通过改写查询让MySQL高效的完成工作。1 关联子查询MySQL的子查询实现的非常糟糕。最糟糕的一类查询时where条件中包含in()的子查询语句。因为MySQL对in()列表中的选项有专门的优化策略,一般会认为MySQL会先执行子查询返回所有in()子句中查询的值。一般来说,...原创 2019-01-17 19:22:50 · 9467 阅读 · 13 评论 -
MySQL架构一:逻辑架构
序和其他数据库系统相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥好的作用,但同时也会带来一点选择上的困难。MySQL并不完美,却足够灵活,能够适应高要求的环境,例如Web类应用。同时,MySQL即可以嵌入到应用程序中,也可以支持数据仓库、内容索引和部署软件、高可用的冗余系统、在线事物处理系统(OLTP)等各种应用类型。为了充分发挥MySQL的性能并顺利的使用,就必须理...原创 2018-12-17 18:50:40 · 391 阅读 · 0 评论 -
MySQL架构二:与存储引擎相关的事物
1.事物日志事物日志可以帮助提高事物的效率。使用事物日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把改修改行为记录到持久在影片上的事物日志中,而不用每次都将修改的数据本身持久到磁盘。事物日志采用的是追加的方式,因此写日志的操作时磁盘上一小块区域内顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事物日志的方式相对来说要快得多。事物日志持久以后,内存中被修改的数据在后台可...原创 2018-12-18 11:05:31 · 263 阅读 · 0 评论 -
MySQL架构三:存储引擎之主要引擎
在文件系统中,MySQL将每个数据库(schema)保存为数据目录下的一个子目录。创建表时,MySQL会在数据库子目录下创建一个和表名相同的.frm文件保存表的定义。例如创建一个名为MyTable的表,MySQL会在MyTable.frm文件中保存该表的定义。因为MySQL使用文件系统的目录和文件来保存数据库和表的定义,大小写敏感性和具体的平台密切相关。在Windows中,大小写是不敏感的;而在类...原创 2018-12-25 16:53:04 · 305 阅读 · 0 评论 -
MySQL优化二:如何创建高性能索引之索引基础
索引是存储引擎用于快速找到记录的一种数据结构。这是索引的基本功能。索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时,索引对性能的影响越发重要。在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但当数据量主键增大时,性能则会急剧下降。索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高几个数量级。最优的索引有时比一个好的索引要高两个数量级。创建一个真...原创 2019-01-10 19:43:08 · 322 阅读 · 0 评论 -
MySQL架构三:存储引擎之第三方存储引擎
MySQL从2007年开始提供了插件式的存储引擎API,从此涌出了一系列为不同目的而设计的存储引擎。其中一些已经合并到MySQL服务器,但大多数还是第三方产品或者开源项目。1 OLTP类引擎Percona的XtraDB存储引擎是基于InnoDB引擎的一个改进版本,已经包含在Percona Server和MariaDB中,它的改进点主要集中在性能、可测量性和操作灵活性方面。XtraDB可以作...原创 2019-01-06 21:24:27 · 1034 阅读 · 4 评论 -
MySQL架构三:如何选择合适的存储引擎
上一篇中说到了很多存储引擎,那么我们应该如何选择呢,大部分情况下,InnoDB都是正确的选择,所以Oracle在MySQL5.5版本时终于将InnoDB作为默认的存储引擎了。对于如何选择存储引擎,可以见到的归纳为一句话:除非必须要用到某些InnoDB布局被的特性,并且没有其他更好的方式可以实现,否则都应该选择InnoDB引擎。例如,如果要用到全文索引,建议优先考虑InnoDB加上Sphinx的组合...原创 2019-01-06 22:42:25 · 500 阅读 · 0 评论 -
MySQL优化三:查询性能优化之SQL查询执行过程
当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的。一旦理解这一点,很多查询优化工作实际上就是遵循一些原则让优化器能够按照预想的合理的方式运行。MySQL执行查询过程:① 客户端发送一条查询给服务器。② 服务器先检查查询缓存,如果命中缓存,则立即返回结果。否则进入下一阶段。③ 服务器端进行sql解析、预处理,在由优化器生成对应的执行...原创 2019-01-17 16:48:23 · 1423 阅读 · 4 评论 -
MySQL架构三:如何转换表的引擎+引擎类总结
转换表的引擎有很多种方法可以将表的存储引擎转换成另外一种引擎。每种方法都有其优缺点,下面介绍三种方法。① ALTER TABLE将表从一个引擎修改为另一个引擎最简单的方法就是使用ALTER TABLE语句,例:ALTER TABLE table_name ENGINE = InnoDB;上述语法可以适用于任何存储引擎。但是有一个问题:当数据过多时,会需要执行很长时间,期间可能会...原创 2019-01-07 12:08:28 · 279 阅读 · 0 评论 -
MySQL架构三:存储引擎之内建的其他存储引擎
MySQL还有一些由特殊用途的存储引擎。在新版本中,有些可能因为一些原因已经不再支持;另外还有些会继续支持,但是需要明确的启用后才能使用。1 Archive引擎Archive存储引擎只支持Insert和Select操作,在MySQL5.1之前也不支持索引。Archive引擎会缓存所有的写操作并利用zlib对插入的行进行压缩,所以比MyISAM表的磁盘I/O少。但是每次select查询都需要...原创 2018-12-26 17:17:40 · 271 阅读 · 0 评论