数据库的优化

2020-08-30  本文已影响0人  Responsibility_
image.png

1.MySQL的缓存是一种KV结构,保存在服务器的内存当中。(K是SQL语句,V查询结果)
2.表的结构发生改变,或值发生改变(删、改、查),缓存都会失效,不适用于频繁修改的场景。
3.自定义函数,存储函数,视图,变量、系统表等缓存都不会记录。
4.缓存会给数据库系统带来额外的开销。读操作,无论是否命中都检查缓存,并保存至缓存。

根据业务不同做好拆表工作。批处理代替单条数据插入。

通过对关键字的匹配(SELECT、*、FROM等),产生语法解析树。
如果有预处理操作则生成新的解析树,使用预处理也可以提高效率。

explain + SQL语句可查看MySQL的执行计划

MySQL执行计划.png
id

包含一组数字,表示查询中执行select子句或操作表的顺序,从上往下按顺序执行,数字越大,优先级越高,越先执行。

select_type

表示查询的语句的种类型,简单或者复杂。

MySQL在表中找到所需行的方式,又称访问类型。

访问类型的方式


访问类型.png
possible_keys

指出Mysql在使用哪个索引查询,如果没有使用索引则为null.

key_len

索引的长度

ref

哪些列或常量被用于查找索引列上的值.

rows

估算的找到所需的记录所需要读取的行数

Extra

重要的额外信息
例如:
Using index:该值表示相应的select操作中使用了覆盖索引(Covering Index) Using where:表示MySQL服务器在存储引擎搜索到记录后进行“后过滤”(Post-filter)
如果查询未能使用索引,Using where的作用只是提醒我们MySQL将用where子句来过滤结果集

数据库优化的三个方面
  1. 日期类型避免使用Datetime,建议使用Timestamp(4个字节)。 对于只需要精确至某一天的数据,建议使用Date(只需要3个字节,比Timestamp还少)。
  1. 索引应建立在MAX( )、MIN( )、ORDER BY、WHERE、JOIN等函数/语句对应的字段。
    4.避免在有索引的字段使用函数,将无法使用索引。
    5.避免使用like时使用索引,“%xx”不走索引,“xx%”才能走索引。
上一篇下一篇

猜你喜欢

热点阅读