概述
闲来无事,看了下高性能mysql这本书,其中的一些MySQL高级特性写的还不错,在这里总结分享下。
01.分区表
1、分区表限制
2、分区表注意点
按行写入大量数据时分区过多会出现问题,所以对大多数系统,100左右个分区是没有问题的
注:键分区和哈希分区没有此问题
3、查询优化
对于访问分区来说,在where中带分区列是很重要的(能过滤部分分区)
注:where中要使用分区函数列本身才能过滤分区,如where time='2017',而where YEAR(time)=2017错误
02.视图
1、概念
虚拟表,不存数据,数据来自其他表
2、更新视图
更新列必须来自同一表,且含GROUP BY、UNION、聚合函数及特殊情况不能更新
3、对性能的影响
重构数据库时可使用视图而不必修改表结构,用视图创建基于列的权限控制减少额外开销等
4、视图的限制
不支持物化视图(即视图在表中不可查看),不支持视图中建索引
03.外键索引
InnoDB是mysql目前唯一支持外键索引的内置引擎
外键成本:外键每次修改数据时都要求在另一张表多执行一次查找,当然外键在相关数据删除和更新上比在应用中维护更高效。
注:许多案例中发现,在对性能分析时发现外键就是瓶颈所在,删除外键后性能立即大幅提升。
04.字符集和校对
字符集编码优先级:列>表>数据库
校对规则:_cs、_ci、_bin分别对应大小写不敏感、大小写敏感、二进制值
05.全文索引
mysql不支持中文全文索引,应用其他引擎如 Sphinx等
06.分布式(XA)事务
企业在分布式多数据库下仍能保证事务的ACID,这里后面单独介绍。
07.查询缓存
概念:缓存select结果,跳过解析、优化、执行阶段。
查询缓存是完全存储在内存中。mysql无法为每一个查询结果精确分配大小刚好配匹的缓存空间。
查询缓存如何分配内存来存储结果数据
查询缓存无法***的原因:包含不确定的函数、未处理过该查询、内存用完被逐出
配置和维护查询缓存:
通用查询缓存优化:
1) 用多个小表代替一个大表对查询缓存
2)批量写入时只需要做一次缓存失效
3)缓存空间太大,服务器可能僵死,办法是控制大小或禁用
4)用SQL_CACHE、SQL_NO_CACHE控制某个select是否缓存
5)对于写密集型应用,直接禁用查询缓存更好
注:若需要更高的缓存效率,推荐使用memcached或redis之类
前言 关于Window,你了解多少呢?看看下面这些问题你都能答上来吗。 如果你遇到这...
大家好,今天我们来简单的聊一聊缓存问题。什么是缓存呢?它在系统设计中是在一个...
首先给扑克牌中每张牌设定一个编号,下面算法实现的编号规则如下: u 红桃按照从...
从功能测试、性能测试、界面测试、安全性测试、易用性、兼容性测试、震动测试七...
git工作区,暂存区,版本库之间的关系: 我们建立的项目文件夹就是工作区,在初...
我们知道微软将会在今年给Windows10更换全新设计的UI,让Windows10的界面更加整...
今日国内领先的智能数据服务运营商觉非科技完成近亿元A轮融资。本轮融资由和高资...
本文实例讲述了jsp中page指令用法。分享给大家供大家参考。具体如下: 一、JSP ...
一、简介 本设计为硬币图像识别统计装置通过数码相机获取平铺无重叠堆积的硬币的...
一、MVC MVC模式的意思是,软件可以分成三个部分。 视图(View):用户界面。 控...