MYSQL性能分析

//SQL调优的看法

1.观察,看看生产的慢SQL情况
2.开启慢查询日志,设置阙值将它取出来
3.explain+慢SQL分析
4.show profile查询SQL在Mysql服务器里面的执行细节和生命周期情况
5.数据库服务器的参数调优	

//引擎innodb(对比MYISAM)

支持主外键
支持事务
支持行锁、表锁
不仅缓存索引还缓存数据,对内存要求较高
关注点是事务

//SQL性能下降的原因

查询语句写得烂
索引失效
关联太多join
服务器调优及各个参数设置(缓存,线程数等)

//加载顺序

FROM
ON
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
ORDER BY
LIMIT

//索引

索引是 排好序的快速查找数据结构
索引往往以索引文件的形式存储的磁盘上

优势:提高数据检索的效率,降低IO;降低数据排序的成本,降低cpu的消耗
缺点:索引也是一张表,也要占空间;降低更新表的速度

分类:单值索引、唯一索引、复合索引
普通索引:CREATE INDEX idx_user_name ON user_table(name_column);
唯一索引:CREATE UNIQUE INDEX idx_user_name ON user_table(name_column);
多列索引:CREATE INDEX idx_user_name ON user_table(name_column,phone_column);
查看索引:SHOW INDEX FROM user_table;

索引结构:
	BTree索引 
	Hash索引
	full-text全文索引
	R-Tree索引

//适合建索引
	主键自动建立唯一索引
	频繁作为查询条件的字段
	查询中与其他表关联的字段
	高并发下倾向创建组合索引
	查询中的排序字段
	查询中的统计或者分组字段

//不适合建索引
	表记录太少(300万)
	更新频繁的字段
	重复频繁的字段

//性能分析

MySQL Query Optimizer(MySQL自动优化器)
MySQL常见瓶颈:CPU、IO、服务器硬件的性能瓶颈(top,free,iostat和vmstat来查看系统的性能状态)
Explain
Show profile

//索引优化

全值匹配
最佳左前缀法则
不在索引列上做任何操作
(范围之后全失效)存储引擎不能使用索引中范围条件右边的列
尽量使用覆盖索引
mysql在使用 != 的时候无法使用索引
is null、is not null 也无法使用索引
like以通配符开头,mysql索引失效
字符串不加单引号索引失效
少用or,索引失效

//查询优化

永远小表驱动大表(exists和in,具体分析)
order by 关键字优化:
	尽量使用index方式排序(同升同降,最左原则)
	如果不在索引列上,filesort有两种算法,4.1之后默认单路排序(一次读取,在buffer进行排序)
	优化策略:增大sort_buffer_size参数的设置、增大max_length_for_sort_data参数的设置
	不要用select *,会占用buffer
group by 关键字优化(先排序后分组)
	同order by 一样
	where高于having,能写在where限定的条件就不要去having限定了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值