登陆

极彩娱乐注册官方网站-阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结

admin 2019-10-31 267人围观 ,发现0个评论

MySQL优化概述

MySQL数据库常见的两个瓶颈是:CPU和I/O的瓶颈。

CPU在饱满的时分一般发作在数据装入内存或从磁盘上读取数据时分

磁盘I/O瓶颈发作在装入数据远极彩娱乐注册官方网站-阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结大于内存容量的时分,假如运用散布在网络上,那么查询量相当大的时分那么平瓶颈就会呈现在网络上。

咱们能够用mpstat, iostat, sar和vmstat来检查体系的功能状况。除了服务器硬件的功能瓶颈,关于MySQL体系自身,咱们能够运用东西来优化数据库的功能。

MySQL优化计划

Mysql的优化,大体能够分为三部分:索引的优化,sql句子的优化,表的优化

索引优化

1.索引

一般的运用体系,读写份额在10:1左右,并且刺进操作和一般的更新操作很少呈现功能问题,在出产环境中,咱们遇到最多的也是最简略呈现问题的,仍是一些杂乱的查询操作,因而对查询句子的优化是重中之重,加速查询最好的办法便是索引。

索引:简略的说,相当于图书的目录,能够协助用户快速的找到需求的内容。

在MySQL中也叫做“键”,是存储引擎用于快速找到记载的一种数据结构。能够大大进步查询功率。特别是当数据量非常大,查询触及多个表时,运用索引往往能使查询速度加速不计其数倍。

总结:索引的意图在于进步查极彩娱乐注册官方网站-阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结询功率,与咱们查询图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小结,然后找到页数。相似的比如还有:查字典,查地图等。

2.索引类型

  • 一般索引

是最根本的索引,它没有任何约束。

  • 仅有索引
与前面的一般索引相似,不同的便是:索引列的值有必要仅有,但答应有空值。假如是组合索引,则列值的组合有必要仅有。
  • 组合索引
指多个字段上创立的索引,只需在查询条件中运用了创立索引时的第一个字段,索引才会被运用。
  • 主键索引

是一种特别的仅有索引,一个表只能有一个主键,不答应有空值。一般是在建表的时分一起创立主键索引

  • 全文索引

首要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎极彩娱乐注册官方网站-阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结,而不是简略的where句子的参数匹配。fulltext索引合作match against操作运用,而不是一般的where句子加like。它能够在create table,alter table ,create index运用,不过现在只需char、varchar,text 列上能够创立全文索引。值得一提的是,在数据量较大时分,现将数据放入一个没有大局索引的表中,然后再用CREATE index创立fulltext索引,要比先为一张表树立fulltext然后再将数据写入的速度快许多。

3.索引优化

  • 只需列中含有NULL值,就最好不要在此例设置索引,极彩娱乐注册官方网站-阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结复合索引假如有NULL值,此列在运用时也不会运用索引
  • 尽量运用短索引,假如能够,应该拟定一个前缀长度
  • 关于常常在where子句运用的列,最好设置索引,这样会加速查找速度
  • 关于有多个列where或许order by子句的,应该树立复合索引
  • 关于like句子,以%或许‘-’最初的不会运用索引,以%结束会运用索引
  • 尽量不要在列上进行运算(函数操作和表达式操作)
  • 尽量不要运用not in和<>操作

SQL慢查询的优化

1.怎么捕获低效sql

1)slow_query_lo极彩娱乐注册官方网站-阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结g

这个参数设置为ON,能够捕获履行时间超越必定数值的SQL句子。

2)ong_query_time

当SQL句子履行时间超越此数值时,就会被记载到日志中,主张设置为1或许更短。

3)slow_query_log_file

记载日志的文件名。

4)log_queries_not_using_indexes

这个参数设置为ON,能够捕获到一切未运用索引的SQL句子,虽然这个SQL句子有或许履行得挺快。

2.慢查询优化的根本过程

1)先运转看看是否真的很慢,留意设置SQL_NO_CACHE

2)where条件单表查,确定最小回来记载表。这句话的意思是把查询句子的where都运用到表中回来的记载数最小的表开端查起,单表每个字段别离查询,看哪个字段的区分度最高

3)explain检查履行计划,是否与1预期共同(从确定记载较少的表开端查询)

4)order by limit 方式的sql句子让排序的表优先查

5)了解事务方运用场景

6)加索引时参照建索引的几大准则

7)调查成果,不符合预期持续从1开端剖析

2.优化准则

  • 查询时,能不要*就不必*,尽量写全字段名
  • 大部分状况衔接功率远大于子查询
  • 多运用explain和profile剖析查询句子
  • 检查慢查询日志,找出履行时间长的sql句子优化
  • 多表衔接时,尽量小表驱动大表,即小表 join 大表
  • 在千万级分页时运用limit
  • 关于常常运用的查询,能够敞开缓存

数据库表优化

  • 表的字段尽或许用NOT NULL
  • 字段长度固定的表查询会更快
  • 把数据库的大表准时间或一些标志分红小表
  • 将表拆分

数据表拆分:首要便是笔直拆分和水平拆分。

水平切分:将记载散列到不同的表中,各表的结构完全相同,每次从分表中查询, 进步功率。

笔直切分:将表中大字段独自拆分到别的一张表, 构成一对一的联系。

总归:

Mysql的优化首要就在于:索引的优化,sql句子的优化,表的优化,在高并发网络环境下,除了优化数据库外,还会触及到散布式缓存,CDN,数据库读写别离等高并发优化技能。


本文标题:阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结

转载请保存页面地址:https://youzhixueyuan.com/mysql-slow-query-optimizat鱼缸过滤器ion-index-optimization.html

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP