当key_cache_miss_rate(key_reads/key_read_requests*100%) 大于1%时需要增加 key_buffer_size (show global status like ‘key_read‘)
对于MyISAM 需要注意table_cache的设置 当这个不够用时MYSQL会采用LRU算法踢掉最长时间没使用的表,过小时,会反复打开关闭造成性能损失。过大 会消耗很多CPU 可以参考opemed_tables参数的值 一直增长就适当增加值
对于InnoDB 需要重点注意 innodb_buffer_pool_size参数
从表中删除大量行后,可运行OPTIMIZE TABLE TableName进行碎片整理
理论上,当MYSQL单表数据到达1000万条之后不管怎么优化sql语句还是会对性能有影响 ORACLE则是2亿
show variables like ‘%partition%‘;查看是否支持分区
alter table 表名 add partition(paratition 分区名 values 条件) DROP删除
分区后不支持外键 ,一个表最多1024个分区,使用分区最好不要使用主键否则影响性能,使用分区可能会使索引失效
分表(垂直分表,水平分表)之后对查询、分页和统计会遇到问题 通用方法是在程序中进行处理辅助视图
创建视图,MYSQL的只是一个虚拟表,只包含定义而不含有任何数据。
可以用一个简单的视图查询来代替冗长的SQL如果是Oracle还可以在视图中存放真的数据加快查询速度。
性能优势在Mysql中不存在,但是在Oracle等商业数据库中,视图支持更多的特性。、
原文:https://www.cnblogs.com/jerrydailyphp/p/10461696.html