SQL优化笔记--explain看执行计划--主要还是看用了哪些索引,所以你是否失效--分库分表的注意事项(未完)
1.优化的是查询,没有说增删改,缓存也是在提高查询速度
2.数据库层面(因为还有硬件层面,缓存层面,先不聊) 的查询速度 的提升== 成本低 性价比高
3. bug不是你写的,但可以是你解决的
4.sql优化怎么定位sql语句 ?通过慢日志(slow log),抓超时的sql语句,再分析,然后加索引
5.定位
show VARIABLES like 'slow_query%';
"slow log"通常指的是数据库中的慢查询日志,它记录了执行时间超过一定阈值的数据库操作,这些操作可能是查询、更新或其他数据库命令。慢日志对于数据库性能优化非常重要,因为它可以帮助数据库管理员或开发人员识别和解决性能问题。
-
查看慢日志:不同的数据库系统提供了不同的方法来查看慢日志。例如,在MySQL中,可以通过设置
slow_query_log
参数来启用慢查询日志,并使用slow_query_log_file
参数指定日志文件的路径。在Navicat等数据库管理工具中,也可以通过界面来查看和分析慢日志。 -
要查看MySQL的慢查询日志,可以按照以下步骤进行操作:
1. 确认慢查询日志是否开启
可以通过执行以下命令来查看慢查询日志的状态:
SHOW VARIABLES LIKE 'slow_query_log';
如果返回结果中的
Value
为ON
,则表示慢查询日志已经开启;如果为OFF
,则需要先开启慢查询日志。2. 开启慢查询日志(如果尚未开启)
可以通过修改MySQL的配置文件(通常是
my.cnf
或my.ini
)来开启慢查询日志。在配置文件的[mysqld]
部分添加或修改以下参数:slow_query_log = 1 slow_query_log_file = /path/to/slow-query.log long_query_time = 2
其中,
slow_query_log
设置为1
表示开启慢查询日志,slow_query_log_file
指定了慢查询日志文件的路径,long_query_time
定义了查询执行时间的阈值(单位为秒),超过该时间的查询将被记录到慢查询日志中。3. 查看慢查询日志文件
慢查询日志是以文本形式存储的,可以直接使用文本编辑器打开慢查询日志文件进行查看。日志文件的路径在配置文件中通过
slow_query_log_file
参数指定。4. 使用
mysqldumpslow
工具分析慢查询日志(可选)如果慢查询日志文件内容较多,可以使用
mysqldumpslow
工具对日志进行分析。该工具可以对慢查询日志进行排序、汇总,以便更容易找到执行时间较长的查询。例如,执行以下命令可以显示执行时间最长的10条查询:mysqldumpslow -s t -t 10 /path/to/slow-query.log
其中,
-s t
表示按照查询时间进行排序,-t 10
表示显示前10条记录。
6.分析
-
分析慢日志:分析慢日志时,通常需要关注以下几个方面:
- 查询的执行时间
- 扫描的行数
- 是否使用了索引
- 查询的类型(例如SELECT、UPDATE等)
- 看执行计划,优化器自己生成的执行计划
- 数据量到达什么情况需要考虑分库分表(开销很大)?
- 数据量大于2G以上,--看数据库表文件,如果ibd文件2G以上,单表500万以上 ,就需要分库分表,这个是阿里巴巴的内部规定,所以这是个建议值
- 查询语句的优化
- 数据库的三大范式:范式就是规范
- 为什么遵循三范式?
- 能让数据(表)的存储空间占用率最小,利用率最高,用最小的存储表达最多的业务
- 第一范式:列不可再分
- 举例:收件人的地址可以拆分为“省”,“市”,“区”,等等到“门牌号
- 第二范式:表不可再分
- 一个表只说一个资源,只表达一个业务模型,也就是一个名词对应一张表
- 第三范式:消除数据冗余
- 消除重复字段
- 当一个字段经常被展示,且还要联表查询,可以适当冗余,一般都是核心业务表会冗余,最大的问题是 修改这个字段时要保证数据的一致性,修改的时候要同步维护,(占用存储空间,修改效率低)
- 建表7字段:就是一个业务表应该有的字段,
- sql语句的质量
- 子句的执行顺序
- 小表驱动大表(笛卡尔积降量)
- 为什么遵循三范式?
- explain分析
7.调优
1.索引
定义:索引是一种数据结构,目的是提升查询速度,原理是降低查询的遍历次数,查询次数可以用关键字explain看到,索引的本质是排序
1.为什么选树作为索引的核心结构?
2.索引的结构和选择的存储引擎有关系。为什么?
3. MySQL 索引结构 支持hash(innoDB)和b+tree(memery)
1.hash :精确查询速度快,范围查询慢(比如查找年龄大于10的)
2.b+tree: 范围查询快(可以推出)B+tree联合查询看这个
4.索引类型:单值 ,唯一 ,主键,复合
5.建立索引就是