概述中详细讲解MySQL的高级特性总结。01.分区表1.分区表限制一个表最多有1024个分区。分区表不能使用外键约束。2、注意分区表。当按行写入大量数据时,会出现分区太多的问题,所以对于大多数系统来说,100个左右的分区是没有问题的注意:Key分区和hash分区没有这个问题使用分区函数column本身过滤分区,比如wheretime='2017',whereYEAR(time)=2017错误02.View1,概念虚表,不存储数据,数据来自其他表2,updateviewupdatecolumnmust来自同一张表,包括GROUPBY、UNION、聚合函数和特殊情况不能更新3.对性能的影响重构数据库时可以在不修改表结构的情况下使用视图,使用视图创建基于列的权限控制以减少附加开销等4、视图限制不支持物化视图(即不能在表中查看视图),不支持在视图中建立索引。03.外键索引InnoDB是目前mysql中唯一内置的支持外键索引的引擎。外键成本:每次修改外键数据需要在另一张表中多查找一次。当然,外键在删除和更新相关数据方面比在应用程序中更高效。注意:很多时候在分析性能的时候发现外键是瓶颈,删除外键后性能立马有了很大的提升。04、字符集和校对字符集编码优先级:列>表>数据库校对规则:_cs、_ci、_bin分别对应不区分大小写、区分大小写、二进制值。05.全文索引mysql不支持中文全文索引,适用Sphinx等其他引擎06.分布式(XA)事务企业在分布式多库下仍然可以保证事务的ACID,后面会介绍稍后在这里分开。07.查询缓存概念:缓存select结果,跳过解析、优化、执行阶段。查询缓存完全存储在内存中。mysql不能准确的为每个查询结果分配大小恰到好处的缓存空间。querycache如何分配内存存储结果数据querycache无法安装的原因:包含不确定的功能,query未处理,内存耗尽被逐出配置和维护querycache:query_cache_type:是否开启querycache,setIntoON,OFF,DEMAND(这个只有在明确说明SQL_CACHE的情况下才放入缓存)query_cache_size:querycache使用的总内存空间(值为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
