百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> 条记之 MySQL 优化
分享文章到:

条记之 MySQL 优化

发布时间:01/01 来源:未知 浏览: 关键词:

mysql视频教程栏目介绍MySQL的优化办法

引荐(免费):mysql视频教程

记载学习笔记,连续更新。

优化标的目的

SQL优化

  1. sql优化剖析
  2. 索引优化

优化数据库对象

  1. 优化表的数据类型
  2. 表拆分(水平、垂直)
  3. 反范式
  4. 使用中心表

优化 mysql server

  1. mysql内存治理优化
  2. log机制及优化
  3. 调整mysql并发参数

利用优化

  1. 数据库连接池
  2. 使用缓存减少压力
  3. 负载平衡创立集群
  4. 主主同步、主从复制

Mysql优化问题剖析定位

剖析SQL施行频率

show status

例如:剖析读为主,还是写为主

定位施行效力低的SQl

慢查询日志定位-log-slow-queries = xxx(指定文件名)SHOW PROCESSLIST查看当前正在停止的线程,包罗线程状态、可否锁表

剖析SQL施行方案

explain "your sql"desc "your sql"- 部分参数剖析
select_type: SIMPLE 简便表,不使用表连接或子查询PRIMARY 主查询,即外层的查询UNION SUBQUER 子查询的第一个select

type: ALL 全表扫描
index 索引全扫描
range 索引范畴扫描
ref 使用非独一索引或独一索引的前缀扫描
eq_ref 相似ref,使用的索引是独一索引const/system 单表中最多有一个匹配行NULL 不消拜访表或者索引,直接得到结果

show profile剖析SQL

select @@have_profiling 可否支撑
select @@profiling 可否开启

施行 "your sql"show profiles 
show profile block io for QUERY 17

索引优化

索引的储备分类

B-TREE索引:常见,大部分都支撑HASH索引:只要memory引擎支撑R-TREE索引:空间索引是MyISAM的一个非凡索引类型,主要用于地理空间数据类型
full-text索引:全文索引,MyISAM的一个非凡索引类型,innodb从5.6开端支撑

索引的创立与删除

增加索引ALTER Table `table_name` ADD PRIMARY KEY(`column`)ALTER Table `table_name` ADD UNIQUE(`column`)ALTER Table `table_name` ADD INDEX(`column`)ALTER Table `table_name` ADD FULLTEXT(`column`)

删除ALTER Table `table_name` drop index index_name

Mysql中能使用索引的状况

匹配全值
匹配值范畴查询
匹配最左前缀
仅仅对索引停止查询(覆盖查询)
匹配列前缀 (增加前缀索引)
部分准确+部分范畴

不克不及使用索引的场景

以%开关的like查询
数据类型显现隐式转换
复合索引查询前提不包括最左部分
使用索引仍比全表扫描慢
用or分割开的前提

mysql语句优化

按期优化表

optimize table table_name 合并表空间碎片,对MyISAM、BDB、INNODB有效

假如提醒不支撑,可以用 mysql --skip-new 或者 mysql --safe-mode 来重新启动,以便让其他引擎支撑

常用优化

尽量幸免全表扫描,对where及orderby的列创立索引
尽量幸免where使用 != 或 <>尽量幸免where子句用 or 连接前提
乱用%致使全表扫描
尽量幸免where子句对字段停止表达式操纵
尽量幸免where子句对字段停止函数操纵
覆盖查询,返回需要的字段
优化嵌套查询,关联查询优于子查询
组合索引或复合索引,最左索引原则
用exist代替in当索引列有大量反复数据时,SQL查询大概不会去利用索引

优化数据库对象

优化表数据类型

PROCEDURE ANALYSE (16,256) 排除多于16个,大于256字节的ENUM倡议"your sql" PROCEDURE ANALYSE ()

表拆分

垂直拆分
针对某些列常用、不常用

水平拆分
表很大
表中的数据有独立性,能简便分类
需要在表存置多种介质

反范式

增添冗余列、增添派生列、从新组表和分割表

使用中心表

数据查询量大
数据统计、剖析场景

Mysql引擎比力

mysql有什么引擎?

MySQL 优化笔记

关于表引擎的命令

show engines; 查看myql所支撑的储备引擎
show variables like '%storage_engine'; 查看mysql默许的储备引擎
show create table table_name 查看详细表使用的储备引擎

关于innodb

1. 供给事务、回滚、系统奔溃修复能力、多版本并发操纵事务2. 支撑自增列3. 支撑外键4. 支撑事务乃至事务相关联功效5. 支撑mvcc的行级锁

关于MyISAM

1. 不支撑事务、不支撑行级锁,只支撑并发插入的表锁,主要用于高负载的select2. 支撑三种不一样的储备构造:静态、动态、紧缩

调整参数优化mysql后台效劳

MyISAM内存优化

#修改响应效劳器位置的配置文件 my.cnf

key_buffer_size
决议myisam索引块缓存区的大小,直接影响表的存取效力,倡议1/4可用内存

read_buffer 读缓存

write_buffer 写缓存

InnoDB内存优化

innodb_buffer_pool_size 储备引擎表数据和索引数据的最大缓存区大小

innodb_old_blocks_pct LRU算法 决议old sublist的比例

innodb_old_blocks_time LRU算法 数据转移间隔时间

mysql并发参数

max_connections 最大连接数,默许151back_log 短时间内处置大量连接,可恰当增大

table_open_cache 操纵所有SQL施行线程可翻开表缓存的数目,受其他参数制约

thread_cache_size 操纵缓存客户效劳线程数目,加快数据库连接速度,按照threads_created/connections来衡量可否适宜

innodb_lock_wait_timeout 操纵事务等候行锁时间,默许50ms

Mysql利用优化介绍

为什么要做利用优化

  • 数据的重要性
  • mysql效劳及本身机能瓶颈
  • 包管大型系统不乱可靠运转

利用优化办法

  1. 使用连接池

  2. 减少对mysql的真实连接
    a. 幸免雷同数据反复施行(查询缓存)
    b. 使用mysql缓存(sql缓存)

  3. 负载平衡
    a. LVS 分布式
    b. 读写别离(主主复制、主从复制包管数据一致性)

数据库连接池

php-cp 扩展,仅记载一下,这种方案大概已过时

主从备份及读写别离

主主备份

负载平衡

相关免费学习引荐:php编程(视频)

以上就是笔记之 MySQL 优化的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有153人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板