数据库12——数据库优化2

106 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

MySQL慢查询优化

开启慢查询日志

MySQL中慢查询日志默认是关闭的,可以通过配置文件my.ini或者my.cnf中的log­slow­queries选项打开,也可以在MySQL服务启动的时候使用­­log­slow­queries[=file_name]启动慢查询日志。

启动慢查询日志时,需要在my.ini或者my.cnf文件中配置long_query_time选项指定记录阈值如果某条查询语句的查询时间超过了这个值,这个查询过程将被记录到慢查询日志文件中

分析慢查询日志

利用explain关键字可以模拟优化器执行SQL查询语句,来分析sql慢查询语句。

常见慢查询优化

(1)索引没起作用的情况(explain关键字)

(2)分解关联查询

很多高性能的应用都会对关联查询进行分解,就是可以对每一个表进行一次单表查询,然后将查询结果在应用程序中进行关联,很多场景下这样会更高效。

(3)优化LIMIT分页

偏移量非常大的时候,例如可能是limit 10000,20这样的查询,这是mysql需要查询10020条然后只返回最后20条,前面的10000条记录都将被舍弃,这样的代价很高。优化此类查询的一个最简单的方法是尽可能的使用索引覆盖扫描,而不是查询所有的列。然后根据需要做一次关联操作再返回所需的列。对于偏移量很大的时候这样做的效率会得到很大提升。

连接查询二级索引查出id,在内连接回其他的列,利用聚簇索引)、指定ID

(4)优化数据库结构

对于字段比较多的表,如果有些字段的使用频率很低,可以将这些字段分离出来形成新表。因为当一个表的数据量很大时,查询会由于使用频率低的字段的存在而变慢。

对于需要经常联合查询的表,可以建立中间表以提高查询效率。通过建立中间表,把需要经常联合查询的数据插入到中间表中,然后将原来的联合查询改为对中间表的查询,以此来提高查询效率