17、MySQL查询优化

Q:


1、查找分析查询速度慢的原因:
mysql里面有一块内容叫慢查询日志,用来记录查询较慢的语句。这里面我们可以开启它,只要有查询慢的语句都可以记录下来。这样就可以着重的去分析慢的查询语句。详细看补充内容



2、也可以使用show profile

并且把执行的时间也保存下来。并且还可以通过这个临时表的主键ID去查哪一条sql语句是在什么地方发生了一个慢的操作。就是时间花费在什么地方了,是可以知道的。

如:



查询指定id的语句时间花费在什么地方

3、也可以使用:

就是当服务器启动至今一些内容的计数
查看执行的次数

增删改查的一些语句都可以记录

4、

可以帮助记录线程,记录都有哪些是有问题的
可以看到只有一个线程

5、

例如:



可以看出来包含索引使用情况、扫描行数、索引查询类型、等等,进行分析sql查询慢的原因,explain的别名是desc,也可以。

如何优化:优化查询过程中的数据访问



三范式
1NF:字段不可分;
2NF:有主键,非主键字段依赖主键;
3NF:非主键字段不能相互依赖;
解释:
1NF:原子性 字段不可再分,否则就不是关系数据库;
2NF:唯一性 一个表只说明一个事物;
3NF:每列都与主键有直接关系,不存在传递依赖;

第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列

比如说第三范式需要多表的关联,这样来说效率可能会偏低一点,可以做冗余,降低范式,比如经常查询一张表的内容,但是需要关联查询另外一张表的一个字段,可以把这个字段冗余的存到第一个表里面去。用空间去换取时间。

优化长难的查询语句:


可以方便的做缓存。

有可能在删除的时候会锁住这张表,



分表或分区,




explain全盘扫描,取近似值,
增加汇总表,每次信息改变了,就把汇总表信息改一遍,每次查询的时候直接查询汇总表就行了。当然也可以把汇总信息做缓存。


没有索引会导致全文扫描,效率会大打折扣。

子查询(嵌套查询)


distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只能返回它的目标字段,而无法返回其它字段


文件排序导致性能消耗。

你可能感兴趣的:(17、MySQL查询优化)