前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql优化

mysql优化

作者头像
用户1212940
发布2022-04-13 13:28:54
9710
发布2022-04-13 13:28:54
举报
文章被收录于专栏:Lambda

错误浮现,排查,改bug,重写提交,测试,发布

SQL性能下降原因: 1. 查询语句写的烂 2. 索引失效 3. 关联查询太多join(设计缺陷或不得已的需求,七八张表关联一块) 4. 服务器调优及各个参数设置不合理(缓存,线程数等) ...

索引:(Index) 是帮助mysql高效获取数据的 数据结构

1. 索引目的在于提高查询效率,可以类比字典

2. 可以简单理解为"排好序的快速查询数据结构"

3. 索引会影响到where 后面的查询,以及order by 后面的排序

11464886-17c2e6d0dc053412
11464886-17c2e6d0dc053412

1. 单值:

代码语言:javascript
复制
select * from user where name = ''
 create index idx_user_name on user(name)

2. 复合:

代码语言:javascript
复制
select * from user where name = '' and email = ''
 create index idx_user_name_email on user(name, email)
 SQL执行顺序:

1. 手写顺序

代码语言:javascript
复制
SELECT DISTINCT
 <select_list>
 FROM
 <left_table> <join_type> JOIN <right_table> ON <join_condition>
 WHERE
 <where_condition>
 GROUP BY
 <group_by_list>
 HAVING
 <having_condition>
 ORDER BY <order_by_condition>
 LIMIT <limit_number>

2. 机读顺序

代码语言:javascript
复制
FROM
 ON <join_condition>
 <join_type> JOIN <right_table>
 WHERE <where_condition>
 GROUP BY <group_by_list>
 HAVING <having_condition>
 SELECT
 DISTINCT <select_list>
 ORDER BY <order_by_condition>
 LIMIT <limit_number>
11464886-4a3d43f0a6040f78
11464886-4a3d43f0a6040f78

SQL1七种join

11464886-429eda1accef2ea3
11464886-429eda1accef2ea3

1、mysql服务器配置文件优化

1. MySQL允许最大的进程连接数, 2. 每个主机的连接请求异常中断的最大次数, 3. 设置表高速缓存的数目, 4. 指定单个查询能够使用的缓冲区大小,缺省为1M ..... 2、根据不同的业务和需求选择核心的存储引擎(mysql可插拔引擎机制MYISAM INNODB) MyISAM: 1. 不支持主外键、不支持事务 2. 表锁:即使操作一条记录一会锁住整个表,不适合高并发 3. 只缓存索引,不缓存真实数据 4. 表空间小 5. 关注性能(高) InnoDB: 1. 支持主外键、支持事务 2. 行锁:操作一条记录只会锁住一行,不影响其他行,适合高并发 3. 不仅缓存索引,还缓存真实数据,对内存要求高,内存性能直接影响数据库性能 4. 表空间占用大 5. 关注事务

11464886-d149c0c6cad2e46a
11464886-d149c0c6cad2e46a
11464886-c4b6b1ab90ea94db
11464886-c4b6b1ab90ea94db

Explain + SQL语句

多表: 索引创建:left 连接 在右表创建索引 right 连接在左表建立索引

3、sql语句优化:

多表: 索引创建:left 连接 在右表创建索引 right 连接在左表建立索引

条件查询时,如果创建的有复合索引,最后按照复合索引的顺序编写where条件

索引优化口诀 全值匹配我最爱,最左前缀要遵守; 带头大哥不能死,中间兄弟不能断; 索引列上少计算,范围之后全失效; LIKE百分写最右,覆盖索引不写星; 不等空值不用or,索引失效要少用。

慢SQL分析步骤:

1. 观察,至少跑一天,看看生产的慢SQL情况 2. 开启慢查询日志,设置阔值,比如超过5s的就是慢SQL,并将其抓取出来 3. 使用explain+慢sql分析 4. show profile 查询SQL在Mysql服务器里面的执行细节和生命周期情况 5. 运维经理 DBA,进行数据库服务器的参数调优。

查询优化: 1. 永远小表驱动大表,即小的数据集驱动大的数据集

select * from A where id in (select id from B) 等价于 for select id from B for select * from A where A.id = B.id

当B表的数据集小于A表的数据集时,用in优于exists

select * from A whre exists (select 1 from B where B.id = A.id) 等价于 for select * from A for select * from B where B.id = A.id

2. 如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的 索引。所以无论那个表大,用not exists都比not in要快。 3. order by

11464886-0b5759c49c815706
11464886-0b5759c49c815706
11464886-15036bbfcd9a1c43
11464886-15036bbfcd9a1c43
11464886-f49f1e1ca7f5f44b
11464886-f49f1e1ca7f5f44b

group by 优化

11464886-1555c04697967c28
11464886-1555c04697967c28

慢查询日志:

11464886-6742e3af8081f655
11464886-6742e3af8081f655
11464886-7c08b2a5a831b0e2
11464886-7c08b2a5a831b0e2
11464886-d89218f5a42ad2af
11464886-d89218f5a42ad2af
11464886-37b17c1d3ff57fcf
11464886-37b17c1d3ff57fcf
11464886-8e97e634b003b9de
11464886-8e97e634b003b9de
11464886-19d8ea7c1dad3daf
11464886-19d8ea7c1dad3daf
11464886-f4f4e46434f6eabb
11464886-f4f4e46434f6eabb
11464886-f0f87d0065c3bce5
11464886-f0f87d0065c3bce5
11464886-f22df113b914205b
11464886-f22df113b914205b
11464886-cfc4e6d93812befa
11464886-cfc4e6d93812befa
11464886-5e0e5517825c1c20
11464886-5e0e5517825c1c20
11464886-2bf6843deb0a351a
11464886-2bf6843deb0a351a
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/05/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档