MySQL中优化的方法
这篇文章主要介绍MySQL中优化的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
优化方向SQL优化sql优化分析
索引优化
优化数据库对象优化表的数据类型
表拆分(水平、垂直)
反范式
使用中间表
优化 mysql servermysql内存管理优化
log机制及优化
调整mysql并发参数
应用优化数据库连接池
使用缓存减少压力
负载均衡建立集群
主主同步、主从复制
Mysql优化问题分析定位分析SQL执行频率showstatus例如:分析读为主,还是写为主定位执行效率低的SQl
慢查询日志定位-log-slow-queries=xxx(指定文件名)SHOWPROCESSLIST查看当前正在进行的线程,包括线程状态、是否锁表分析SQL执行计划
explain"yoursql"desc"yoursql"-部分参数分析select_type:SIMPLE简单表,不使用表连接或子查询PRIMARY主查询,即外层的查询UNIONSUBQUER子查询的第一个selecttype:ALL全表扫描index索引全扫描range索引范围扫描ref使用非唯一索引或唯一索引的前缀扫描eq_ref类似ref,使用的索引是唯一索引const/system单表中最多有一个匹配行NULL不用访问表或者索引,直接得到结果show profile分析SQL
select@@have_profiling是否支持select@@profiling是否开启执行"yoursql"showprofilesshowprofileblockioforQUERY17索引优化索引的存储分类
B-TREE索引:常见,大部分都支持HASH索引:只有memory引擎支持R-TREE索引:空间索引是MyISAM的一个特殊索引类型,主要用于地理空间数据类型full-text索引:全文索引,MyISAM的一个特殊索引类型,innodb从5.6开始支持索引的创建与删除
添加索引ALTERTable`table_name`ADDPRIMARYKEY(`column`)ALTERTable`table_name`ADDUNIQUE(`column`)ALTERTable`table_name`ADDINDEX(`column`)ALTERTable`table_name`ADDFULLTEXT(`column`)删除ALTERTable`table_name`dropindexindex_nameMysql中能使用索引的情况
匹配全值匹配值范围查询匹配最左前缀仅仅对索引进行查询(覆盖查询)匹配列前缀(添加前缀索引)部分精确+部分范围不能使用索引的场景
以%开关的like查询数据类型出现隐式转换复合索引查询条件不包含最左部分使用索引仍比全表扫描慢用or分割开的条件mysql语句优化定期优化表
optimizetabletable_name合并表空间碎片,对MyISAM、BDB、INNODB有效如果提示不支持,可以用mysql--skip-new或者mysql--safe-mode来重启,以便让其他引擎支持常用优化
尽量避免全表扫描,对where及orderby的列建立索引尽量避免where使用!=或<>尽量避免where子句用or连接条件乱用%导致全表扫描尽量避免where子句对字段进行表达式操作尽量避免where子句对字段进行函数操作覆盖查询,返回需要的字段优化嵌套查询,关联查询优于子查询组合索引或复合索引,最左索引原则用exist代替in当索引列有大量重复数据时,SQL查询可能不会去利用索引优化数据库对象优化表数据类型
PROCEDUREANALYSE(16,256)排除多于16个,大于256字节的ENUM建议"yoursql"PROCEDUREANALYSE()表拆分
垂直拆分针对某些列常用、不常用水平拆分表很大表中的数据有独立性,能简单分类需要在表存放多种介质反范式
增加冗余列、增加派生列、重新组表和分割表使用中间表
数据查询量大数据统计、分析场景Mysql引擎比较mysql有什么引擎?
关于表引擎的命令showengines;查看myql所支持的存储引擎showvariableslike'%storage_engine';查看mysql默认的存储引擎showcreatetabletable_name查看具体表使用的存储引擎关于innodb
1.提供事务、回滚、系统奔溃修复能力、多版本并发控制事务2.支持自增列3.支持外键4.支持事务以及事务相关联功能5.支持mvcc的行级锁关于MyISAM
1.不支持事务、不支持行级锁,只支持并发插入的表锁,主要用于高负载的select2.支持三种不同的存储结构:静态、动态、压缩调整参数优化mysql后台服务MyISAM内存优化
#修改相应服务器位置的配置文件my.cnfkey_buffer_size决定myisam索引块缓存区的大小,直接影响表的存取效率,建议1/4可用内存read_buffer读缓存write_buffer写缓存InnoDB内存优化
innodb_buffer_pool_size存储引擎表数据和索引数据的最大缓存区大小innodb_old_blocks_pctLRU算法决定oldsublist的比例innodb_old_blocks_timeLRU算法数据转移间隔时间mysql并发参数
max_connections最大连接数,默认151back_log短时间内处理大量连接,可适当增大table_open_cache控制所有SQL执行线程可打开表缓存的数量,受其他参数制约thread_cache_size控制缓存客户服务线程数量,加快数据库连接速度,根据threads_created/connections来衡量是否合适innodb_lock_wait_timeout控制事务等待行锁时间,默认50msMysql应用优化介绍为什么要做应用优化
数据的重要性
mysql服务及自身性能瓶颈
保证大型系统稳定可靠运行
应用优化方法使用连接池
减少对mysql的真实连接
a. 避免相同数据重复执行(查询缓存)
b. 使用mysql缓存(sql缓存)
负载均衡
a. LVS 分布式
b. 读写分离(主主复制、主从复制保证数据一致性)
以上是“MySQL中优化的方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。