尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
学习路之mysql--mysql优化,数据库优化
1.cmd登陆mysqlD:\phpstudy_pro\Extensions\MySQL5.7.26\binmysql -uroot -p2.查看数据库引擎show engines;3.sql慢执行时间长等待时间长3.1查询语句写的烂:select不要使用*,3.2索引失效1创建索引--单值索引select * from user where name;create index idx_user_name on user(name)2创建索引--复合索引select * from user where name and email;create index idx_user_nameEmail on user(name,email)3.3关联查询太多join,不要使用子查询3.4服务器调优及各个参数设置(缓冲线程数等)4.sql执行顺序手写顺序select distinctselect_listfrom left_tablejoin_typejoin right_tableon join_conditionwherewhere_conditiongroup bygroup_by_listhavinghaving_conditionorder byorder_by_conditionlimit limit_number机读顺序:from left_tableon join_conditionjoin_typejoin right_tablewhere where_conditiongroup by group_by_listhaving having_conditionselectdistinct select_listorder by order_by_conditionlimit limit_number7种join图例子CREATE TABLE tbl_emp (id int(11) NOT NULL AUTO_INCREMENT,name varchar(20) DEFAULT NULL,deptId int(11) DEFAULT NULL,PRIMARY KEY (id) ,KEY fk_dept_id(deptId))ENGINE InnoDB AUTO_INCREMENT 1 CHARACTER SET utf8;CREATE TABLE tbl_dept (id int(11) NOT NULL AUTO_INCREMENT,deptName varchar(30) DEFAULT NULL,locAdd varchar(40) DEFAULT NULL,PRIMARY KEY (id)) ENGINE InnoDB AUTO_INCREMENT 1 CHARACTER SET utf8;insert into tbl_dept(deptName,locAdd) values(RD,11);insert into tbl_dept(deptName,locAdd) values(HR,12);insert into tbl_dept(deptName,locAdd) values(MK,13);insert into tbl_dept(deptName,locAdd) values(MIS,14);insert into tbl_dept(deptName,locAdd) values(FD,15);insert into tbl_emp(NAME,deptId) values(z3,1);insert into tbl_emp(NAME,deptId) values(z4,1);insert into tbl_emp(NAME,deptId) values(z5,1);insert into tbl_emp(NAME,deptId) values(w5,2);insert into tbl_emp(NAME,deptId) values(w6,2);insert into tbl_emp(NAME,deptId) values(s7,3);insert into tbl_emp(NAME,deptId) values(s8,4);insert into tbl_emp(NAME,deptId) values(s9,51);//迪卡尔积select * from tbl_emp,tbl_dept;//内联 ab共有select * from tbl_emp a inner join tbl_dept b on a.deptIdb.id;//左联 全aselect * from tbl_emp a left join tbl_dept b on a.deptIdb.id;//右联 全bselect * from tbl_emp a right join tbl_dept b on a.deptIdb.id;//a表独有select * from tbl_emp a left join tbl_dept b on a.deptIdb.id whereb.id is null;//b表独有select * from tbl_emp a right join tbl_dept b on a.deptIdb.id wherea.deptId is null;//全a全b //union自带去重select * from tbl_emp a left join tbl_dept b on a.deptIdb.idunionselect * from tbl_emp a right join tbl_dept b on a.deptIdb.id;//a表独有b表独有select * from tbl_emp a left join tbl_dept b on a.deptIdb.id whereb.id is nullunionselect * from tbl_emp a right join tbl_dept b on a.deptIdb.id wherea.deptId is null一、索引。创建create [unique] index indexName on mytable(columenname(length))alter mytable add [unique] index [indexName] on (columenname(length))删除drop index [indexName] on mytable查看show index from table_name二、索引结构。BTree索引Hash索引full-text全文索引R-Tree索引三、需要创建索引。1.主键自动建立唯一索引2.频繁作为查询条件的字段应该创建索引3.查询中与其它表关联的字段外键关系建立索引4.频繁更新的字段不适合创建索引因为每次更新更新记录还要更新索引5.where条件里用不到字段不创建索引6.高并发下倾向使用组合索引7.查询中排序的字段8.查询中统计或分组字段四、不要创建索引1.表记录太少300W2.经常增删改的表3.数据列包含许多重复的内容如国籍索引作用不大五、性能分析explain能干嘛:表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之间的引用每张表有多少行被优化器查询explain sql语句结果字段解释idid相同执行顺序由上至下id不同如果是子查询id的序号会递增id值越大优先级越高越先被执行id相同不同同时存在select_type值:simple简单的select查询不包含子查询或unionprimary:最外层查询subquery:子查询derived:衍生临时表union:联合union result:从union表获取结果的selecttype:最好-最差ALLsystemconsteq_refrefrangeindexALLextra:包含以下需要优化using filesort,using temporary最好的状态using index, using where优化加索引单表创建索引时范围条件不加到索引列中两表优化左联时在右表加索引右联时在左表加索引三表优化和两表相同索引失效案例1.全值匹配我最爱。创建索引的列和查询的列全对应2.最佳左前缀法则. 如果索引多列指查询从索引的最左前列开始并且不跳过索引中的列 nameAgePos name列在则使用了索引带头大哥不能少中间兄弟不能断.3.不在索引列上做任何操作(计算函数类型转换)如select *from staffs left(name,4)july; //left4.存储引擎不能使用索引中范围条件右边的列.age10posmanager 范围之后索引失效.pos索引失效5.尽量使用覆盖索引只访问索引的查询索引列和查询列一致减少select *6.mysql在使用不等于(!或)的时候无法使用索引会导致全表扫描如select name from user where name!zlk;7.is null,is not null 也无法使用索引8.like以通配符开头(%abc..)mysql索引失效会变成全表扫描的操作create index idx_nameAge on user(name,age)如select * from user where name like %zlk%;避免失效 select name from user where name like %zlk%;9.字符串不加单引号,索引失效10.少用or,用它来连接时会索引失效注意group by如果和索引顺序不同也产生file排序 filesort如where c1ai and c4a4 group by c3;索引优化一般建议:对于单键索引尽量选择针对当前query过滤性更好的索引在选择组合索引的时候当前query中过滤性最好的字段在索引字段顺序中位置越靠前越好。在选择组合索引的时候尽量选择可以能够包含当前query中的where子句中更多字段的索引。尽可能通过分析统计信息和调整query的写法来达到选择合适索引的目的案例假设index(a,b,c)where语句 索引是否使用where a3 Y,使用到awhere a3 and b5 Y,使用到a,bwhere a3 and b5 and c4 Y,使用到a,b,cwhere b3 或者 b3 and c4 或者 where c4 Nwhere a3 and c5 Y,使用到a,但是c不可以b中间断了where a3 and b4 and c5 Y,使用到a,b. c不能用在范围之后b中间断了where a3 and b like kk% and c5 Y,使用到a,b,cwhere a3 and b like %kk and c5 Y,使用到awhere a3 and b like %kk% and c5 Y,使用到awhere a3 and b like k%kk% and c5 Y,使用到a,b,c优化总结口诀全值匹配我最爱最左前缀要遵守带头大哥不能死中间兄弟不能断索引列上少计算范围之后全失效Like百分写最右覆盖索引不写星不等空值还有or索引失效要少用VAR引号不可丢SQL高级也不难方法一、使用慢查询日志分析1.观察至少跑1天看看生产的慢sql情况2.开启慢查询日志设置阙值比如超过5秒的就是慢sql,并将它抓取出来3.explain慢sql分析4.show profile5.运维经理or dba进行sql数据库服务器的参数调优--总结1 慢查询的开启并捕获2 xplain慢sql分析3.show profile 查询sql在mysql服务器里面的执行细节和生命周期情况4.sql数据库服务器的参数调优小表驱动大表in与exists 相互转化select * from emp e where e.deptid in(select id form dept )select * from emp e where exists(select 1 form dept d whered.ide.deptid)查看慢查询日志。默认是禁用的show variables like %slow_query_log%;开启set global slow_query_log1;如果要永久生效必须修改my.cnf文件mysqld下增加或修改slow_query_log1slow_query_log_file/var/lib/mysql/atguigu-slow.log //主要-slow.log慢查询时间阙值 默认10sshow variables like long_query_time%;set global long_query_time3; //大于3秒的是慢看效果要重连select sleep(4) //用于模拟查询用时4秒show global status like %slow_queries% //查看慢sql条数方法二、使用show profiles;1,查看支持show variables like profiling2开启功能默认关闭set profilingon3.运行sql4.查看结果show profiles;show profile cpu,block io for query 2; //2对应show profiles id5.诊断sql,6.日常开发注意的结论convertion heap to myisam 查询结果太大creating tmp table 创建临时表copying to tmp table on disk 把内存中临时表locked 锁表方法三、全局查询日志set global general_log1;set global log_outputTABLE;此后所有的sql语句将会记录到mysql库的general_log表可以使用命令查看select * from mysql.general_log;清空表TRUNCATE TABLE cmf_expert_realtime_info;参数视频尚硅谷MySQL数据库高级mysql优化数据库优化_哔哩哔哩_bilibili
RELATED

相关推荐

痘坑联合点阵激光治疗:五次周期完整解析与临床实践

痘坑联合点阵激光治疗:五次周期完整解析与临床实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/18 21:35:24
C#学生管理系统成绩排名图形化实战:Chart控件实现可视化排名

C#学生管理系统成绩排名图形化实战:Chart控件实现可视化排名

各位做 C# 学生管理系统的同学,应该都有同感:基础功能做到后面,增删改查已经很难再写出新意,真正让整个系统“活”起来的,往往是数据展示这一块。尤其是成绩排名,如果继续用一张几百行的 DataGridView 硬磕…

📅 2026/10/24 4:36:32
STM32+ESP8266无线遥控小车:硬件隔离、AT状态机与PID闭环实战

STM32+ESP8266无线遥控小车:硬件隔离、AT状态机与PID闭环实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/20 19:06:33
MORE NEWS

更多资讯

📰

全球化采购管理系统的核心架构与实施策略

1. 项目概述:全球化浪潮下的采购管理新挑战 最近三年间,我接触过47家出海企业的供应链负责人,发现他们普遍面临一个共性难题:当业务版图扩展到3个以上国家时,传统采购管理系统就像穿着紧身衣跳舞——明明知道该怎么做动…

📰

2026财务智能体市场解析与选型指南

1. 财务智能体市场现状与核心价值 2026年的财务智能体市场已经形成了成熟的产业格局。这类智能体本质上是通过AI技术实现财务流程自动化的软件解决方案,它们正在重塑企业财务部门的运作模式。根据Gartner最新报告,全球75%的中大型企业已经部署或正在评估…

📰

EMD+PSO_SVM混合模型在大坝变形预测中的应用

1. 项目概述 大坝变形预测是水利工程安全监测中的核心课题,传统方法常面临非线性、非平稳数据处理难题。本项目创新性地将经验模态分解(EMD)、粒子群优化(PSO)与支持向量机(SVM)相结合,构建了EMDPSO_SVM混合预测模型。通过Matlab实现完整算法流程&#x…

📰

VC6.0在Win7/Win10添加文件失效与FileTool.dll修复

简介:面向仍在使用 Visual C 6.0 的开发者与维护旧项目的技术人员,这份 FileTool 插件资料针对 Windows 7/10 环境下 VC6 无法正常打开文件、添加工程文件的问题,提供可注册的 Developer Studio 附加项及完整源码。压缩包共 51 个文件&#x…

📰

光伏功率预测在极端天气下的挑战与解决方案

1. 光伏功率预测的"黑天鹅"困境 去年西北某光伏电站遭遇了一场突如其来的沙尘暴,30分钟内云层完全遮蔽天空,电站实际出力从满发的50MW骤降到不足5MW。而预测系统给出的曲线依然是一条平滑的弧线,误差率高达90%。这不是个案——根据…

📰

Scikit-learn模型评估:从基础指标到实战应用

1. Scikit-learn简介与模型评估的重要性 Scikit-learn(简称sklearn)作为Python生态中最负盛名的机器学习库之一,其设计哲学始终围绕着实用性和一致性展开。这个由David Cournapeau在2007年启动的项目,如今已成为数据科学家工具箱中…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬