`
- 浏览:
3306 次
-
引起慢查询的原因:
1.向数据库请求了不需要的数据
2.mysql是否在扫描额外的记录
优化步骤:
1.开启慢查询日志,找出慢SQL语句
2.通过explain查询和分析查询计划
一、SQL语句优化
具体优化:
Count,关联查询,group by,limit
count:
统计列时不统计NULL,count(*)统计行数;
count需要扫描大量的行才能获得精确结果,mysql层面只有索引覆盖扫描。如果不够,需要修改架构,也可以添加汇总表或memcached这样的缓存系统。“快速,精确和简单”。三者只能满足其二
关联查询:
从子查询到关联查询需要用distinct去重;
确保on,或者using字句有索引。当A表和B表用列C关联是,如果优化器的关联顺序是B、A,不需要再B表对应的列建立索引,没有用到的索引只会带来额外的负担。只需要在A表建立索引
group by:
group by后面字段没有索引,mysql会创建临时表和重排序,如果不希望排序,可以使用order by null
limit:
当一个数据库表过于庞大,LIMIT offset, length中的offset值过大,则SQL查询语句会非常缓慢,你需增加order by,并且order by字段需要建立索引;
查询根据确定的id返回记录
把limit偏移量限制低于某个数。。超过这个数等于没数据;
二、索引优化
建立合适的索引三原则
1:单行访问时很慢的。
2:按顺序访问范围数据是很快的。原因是顺序I/O不需要多次磁盘寻道;服务器也能够按需要的顺序读取数据,不需要额外的排序操作
3:索引覆盖的查询是很快的
维护索引和表:找到并修复损坏的表,维护准确的索引统计信息,减少碎片
三、数据库结构优化
选择合适的数据类型:
1、在可以正确存储数据的最小前提下存储最小的数据类型;
2、避免NULL,因为null列使索引,值比较更加复杂,还会使用更多的存储空间
3、数据库表范式和反范式设计
4、使用缓存表和汇总表
数据库表垂直和水平拆分:
垂直拆分:把原来一个很多列的表拆分成多个表,解决表宽度太宽的问题
拆分原则:
1、把不常用的字段放到一个表里
2、把大字段独立存到一个表里
3、把进程使用的字段存到一个表里
水平拆分:
解决单表数据量过大的问题,每个表结构完全一致
可以通过主键的hash算法,存储到不同的表中
系统配置和硬件优化:
本公司用的是阿里云RDS,已经优化好了
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化...
mysql性能优化
mysql性能优化教程.pdf,方面阅读
mysql 性能优化与架构设计的word完整版,不可多得得关于 mysql 性能优化以及架构设计方面的资料。
MySQL性能优化和高可用架构实践.pptx
Mysql性能优化教程 优化mysql性能,高并发
caoz的mysql性能优化教程 caoz的mysql性能优化教程 caoz的mysql性能优化教程 caoz的mysql性能优化教程 caoz的mysql性能优化教程
MySQL性能优化中文手册 包括sql语句,存储过程,函数的调试,调优
千金良方:MySQL性能优化金字塔法则.docx
Mysql性能优化教程
MySQL性能优化教学视频: https://www.bilibili.com/video/av29072634/?p=5 对应的笔记和资料
mysql性能优化与诊断,详解优化经验与如何诊断瓶颈在哪
十三MySQL性能优化详解.pdf
MySQL性能优化的最佳20条经验,还不错,可以下载来看看。
mysql 性能 优化 pdf MySQL 介绍和优化分享
大牛-高级教程MySQL性能优化实战。
MySQL性能优化 为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询
MySQL 性能优化 Explain ,MySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 Explain
MySQL性能优化 SQL优化方法技巧