|
|
51CTO旗下网站
|
|
移动端

详解高性能mysql之MySQL高级特性总结

闲来无事,看了下高性能mysql这本书,其中的一些MySQL高级特性写的还不错,在这里总结分享下。

作者:波波说运维来源:今日头条|2019-07-12 08:49

概述

闲来无事,看了下高性能mysql这本书,其中的一些MySQL高级特性写的还不错,在这里总结分享下。

01.分区表

1、分区表限制

  • 一张表最多1024个分区
  • 分区表中无法使用外键约束

2、分区表注意点

按行写入大量数据时分区过多会出现问题,所以对大多数系统,100左右个分区是没有问题的

注:键分区和哈希分区没有此问题

3、查询优化

对于访问分区来说,在where中带分区列是很重要的(能过滤部分分区)

详解高性能mysql之MySQL高级特性总结

注:where中要使用分区函数列本身才能过滤分区,如where time='2017',而where YEAR(time)=2017错误

02.视图

1、概念

虚拟表,不存数据,数据来自其他表

2、更新视图

更新列必须来自同一表,且含GROUP BY、UNION、聚合函数及特殊情况不能更新

3、对性能的影响

重构数据库时可使用视图而不必修改表结构,用视图创建基于列的权限控制减少额外开销等

4、视图的限制

不支持物化视图(即视图在表中不可查看),不支持视图中建索引

03.外键索引

InnoDB是mysql目前唯一支持外键索引的内置引擎

外键成本:外键每次修改数据时都要求在另一张表多执行一次查找,当然外键在相关数据删除和更新上比在应用中维护更高效。

注:许多案例中发现,在对性能分析时发现外键就是瓶颈所在,删除外键后性能立即大幅提升。

04.字符集和校对

详解高性能mysql之MySQL高级特性总结

字符集编码优先级:列>表>数据库

校对规则:_cs、_ci、_bin分别对应大小写不敏感、大小写敏感、二进制值

05.全文索引

mysql不支持中文全文索引,应用其他引擎如 Sphinx等

06.分布式(XA)事务

企业在分布式多数据库下仍能保证事务的ACID,这里后面单独介绍。

07.查询缓存

概念:缓存select结果,跳过解析、优化、执行阶段。

查询缓存是完全存储在内存中。mysql无法为每一个查询结果精确分配大小刚好配匹的缓存空间。

详解高性能mysql之MySQL高级特性总结

查询缓存如何分配内存来存储结果数据

查询缓存无法***的原因:包含不确定的函数、未处理过该查询、内存用完被逐出

配置和维护查询缓存:

  • query_cache_type:是否打开查询缓存,设置成ON、OFF、DEMAND(这个仅在明确写明SQL_CACHE下才放入缓存)
  • query_cache_size:查询缓存使用的总内存空间(值是1024整数倍)
  • query_cache_min_res_unit:查询缓存中分配内存块时的最小单位。
  • query_cache_limit:MySQL能缓存的***查询结果
  • query_cache_wlock_invalidate:某表被锁住,是否仍然从查询缓存返回结果,默认OFF

通用查询缓存优化:

1) 用多个小表代替一个大表对查询缓存

2)批量写入时只需要做一次缓存失效

3)缓存空间太大,服务器可能僵死,办法是控制大小或禁用

4)用SQL_CACHE、SQL_NO_CACHE控制某个select是否缓存

5)对于写密集型应用,直接禁用查询缓存更好

注:若需要更高的缓存效率,推荐使用memcached或redis之类

【编辑推荐】

  1. 对比云端NoSQL数据库类型
  2. 浅谈数据库、JVM、缓存、SQL等性能调优方法和原则
  3. 几款优秀的分布式关系数据库
  4. 两个小工具,MySQL死锁分析,新技能又Get!
  5. MySQL数据库查询缓存总结
【责任编辑:华轩 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

精通SOA:基于服务总线的Struts+EJB+Web Service

Java的出现,实现了跨操作系统平台的程序开发,以Java为基础的J2EE技术已经成为因特网服务技术的主流。然而,以J2EE为基础的SOA架构技术必...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客