《高性能mysql》之MySQL高级特性(第七章)
来源:互联网 发布:程序员第一天上班想哭 编辑:程序博客网 时间:2024/06/05 03:00
①分区表:
-- 分区表限制:
一把表最多1024个分区
分区表中无法使用外键约束
-- 分区表注意点:
按行写入大量数据时分区过多会出现问题,所以对大多数系统,100左右个分区是没有问题的
注:键分区和哈希分区没有此问题
-- 查询优化:对于访问分区来说,在where中带分区列是很重要的(能过滤部分分区)
注:where中要使用分区函数列本身才能过滤分区,如where time='2017',而where YEAR(time)=2017错误
②视图:
概念:虚拟表,不存数据,数据来自其他表
更新视图:更新列必须来自同一表,且含GROUP BY、UNION、聚合函数及特殊情况不能更新
对性能的影响:重构数据库时可使用视图而不必修改表结构,用视图创建基于列的权限控制减少额外开销等
视图的限制:不支持物化视图(即视图在表中不可查看),不支持视图中建索引
③外键索引:
InnoDB是mysql目前唯一支持外键索引的内置引擎
外键成本:外键每次修改数据时都要求在另一张表多执行一次查找,当然外键在相关数据删除和更新上比在应用中维护更高效。
注:许多案例中发现,在对性能分析时发现外键就是瓶颈所在,删除外键后性能立即大幅提升。
④在mysql内部存储代码:
存储过程和触发器(可在你执行insert、update、delete时触发)、游标 ---另开文章细说
⑤字符集和校对:
字符集编码优先级:列>表>数据库
校对规则:_cs、_ci、_bin分别对应 大小写不敏感、大小写敏感、二进制值
⑥全文索引:
mysql不支持中文全文索引,应用其他引擎如 Sphinx等
⑦分布式(XA)事务:
企业报在分布式多数据库下仍能保证事务的ACID
⑧查询缓存:
-- 概念:缓存select结果,跳过解析、优化、执行阶段。
查询缓存是完全存储在内存中。mysql无法为每一个查询结果精确分配大小刚好配匹的缓存空间。
-- 查询缓存无法命中的原因:包含不确定的函数、未处理过该查询、内存用完被逐出
-- 如何判断查询缓存是否有效:
查看Qache_hits和Qache_inserts的比值(3:1查询缓存有效,10:1最佳)
-- 配置和维护查询缓存:
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
减少碎片:命令 FLUSH QUERY CACHE 完成碎片整理
-- InnoDB和查询缓存:表上有任何的锁,该查询结果无法缓存;sql语句有ON DELETE CASCADE,则相关联查询缓存一起失效
通用查询缓存优化:1) 用多个小表代替一个大表对查询缓存
2)批量写入时只需要做一次缓存失效
3)缓存空间太大,服务器可能僵死,办法是控制大小或禁用
4)用SQL_CACHE、SQL_NO_CACHE控制某个select是否缓存
5)对于写密集型应用,直接禁用查询缓存更好
注:若需要更高的缓存效率,推荐使用memcached或redis之类
0 0
- 《高性能mysql》之MySQL高级特性(第七章)
- 高性能MYSQL(高级特性)
- 高性能MySQL 第七章
- 高性能 MySQL 第七章:复制 第二部分
- 《高性能mysql》之高性能索引创建(第五章)
- 高性能Mysql:事务特性及实战
- 《高性能mysql》之复制(第十章)
- 高性能mysql之统计表
- 高性能MySQL之事务
- 高性能MySQL之运行机制
- 数据库之-高性能MySQL
- 书籍:PHP与MYSQL程序设计:高级OPP特性(第七章):持续更新(完)
- 《高性能mysql》之性能分析(第三章)
- 《高性能mysql》之查询性能优化(第六章)
- 《高性能MySQL》之查询性能优化
- MySQL高级特性
- MySQL高级特性
- 10.MySQL 高级特性
- Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式
- 莫队算法学习笔记
- 三天打鱼两天晒网
- The SDK platform-tools version (24.0.4) is too old to check APIs compiled with API 25
- UNIX常用命令行指令(3)(基本输入输出操作)
- 《高性能mysql》之MySQL高级特性(第七章)
- Map迭代3种方式
- lowlevel_init.S(u-boot.2012.10 修改整理后)
- 《Java高并发程序设计》学习 --1.4Java内存模型
- 【Python】 利用汽车数据进行可视化分析
- android开发之获取系统时间的方法
- Binary Ant Colony Optimization
- HashMap类
- C语言中给数组赋值