前言:该篇主要对MySQL中join语句的七种情况进行总结. 0.准备 join主要根据两表或多表之间列的关系,从这些表中进行数据的查询. 首先创建两张表:tb_emp(员工表)和tb_dept(部门表),并插入相关测试数据. 1.tb_emp表. DROP TABLE IF EXISTS `tb_emp`; CREATE TABLE `tb_emp` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, `deptid` ) NOT NULL…
MySQL高级知识(一)——基础 MySQL高级知识(二)——Join查询 MySQL高级知识(三)——索引 MySQL高级知识(四)——Explain MySQL高级知识(五)——索引分析 MySQL高级知识(六)——索引优化 MySQL高级知识(七)——索引面试题分析 MySQL高级知识(八)——ORDER BY优化 MySQL高级知识(九)——慢查询日志 MySQL高级知识(十)——批量插入数据脚本 MySQL高级知识(十一)——Show Profile MySQL高级知识(十二)——全局…
前言:全局查询日志用于保存所有的sql执行记录,该功能主要用于测试环境,在生产环境中永远不要开启该功能. 1.如何开启 #1.通过my.cnf配置开启该功能. 注:对my.cnf文件配置后,需重启mysql. ①通过命令查看全局查询日志是否开启成功. ②查看全log_globalquery.log文件中的内容. 该log文件记录执行过的sql语句. #2.通过命令开启该功能. 通过以上配置,执行过的sql语句将会记录到mysql库中general_log表里. 2.总结 ①通过命令方式开启该功能…
前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5;.......) { for(int j=1000;......) {} } 如果小的循环在外层,对于数据库连接来说就只连接5次,进行5000次操作,如果1000在外,则需要进行1000次数据库连接,从而浪费资源,增加消耗.这就是为什么要小表驱动大表. 2.数据准备 根据MySQL高级知识(十)—…
前言:本章主要讲解MySQL主从复制的操作步骤.由于环境限制,主机使用Windows环境,从机使用用Linux环境.另外MySQL的版本最好一致,笔者采用的MySQL5.7.22版本,具体安装过程请查询相关资料. 1.主从复制的基本原理 slave会从master读取binlog来进行数据同步.主要有以下三个步骤: ①master将改变记录到二进制日志(binary log),这些记录过程叫做二进制日志事件(binary log events). ②slave将master的binary log…
前言:慢查询日志是MySQL提供的一种日志记录,它记录MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的sql语句,该sql语句会被记录到慢查询日志中.慢查询日志主要与explain进行联合分析. 1.如何开启慢查询日志 默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数.如果不是调优需要,一般不建议开启该参数,因为开启慢查询日志或多或少会带来一定的性能影响. #1.首先查看慢查询日志是否开启. 注:Value为OFF表示关闭,笔者已…
前言:前面学习了表锁的相关知识,本篇主要介绍行锁的相关知识.行锁偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,但并发度高. 0.准备 #1.创建相关测试表tb_innodb_lock,注意数据库引擎为InnoDB. drop table if exists test_innodb_lock; CREATE TABLE test_innodb_lock ( a ), b ) ) ENGINE INNODB DEFAULT charset = utf8; ,'…
前言:使用脚本进行大数据量的批量插入,对特定情况下测试数据集的建立非常有用. 0.准备 #1.创建tb_dept_bigdata(部门表). create table tb_dept_bigdata( id int unsigned primary key auto_increment, deptno mediumint unsigned , dname ) not null default '', loc ) not null default '' )engine=innodb default…
前言:Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量.默认情况下处于关闭状态,并保存最近15次的运行结果. 1.分析步骤 #1.开启Show Profile功能,默认该功能是关闭的,使用前需开启. #2.根据MySQL高级知识(十)——批量插入数据脚本中的数据脚本向tb_emp_bigdata表中插入50w条数据.然后执行如下查询语句: limit ; ; #3.通过show profiles查看结果. #4.使用sho…
前言:explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句.explain主要用于分析查询语句或表结构的性能瓶颈. 注:本系列随笔如无特殊说明都MySQL版本都为5.7.22. 1.explain的作用 通过explain+sql语句可以知道如下内容: ①表的读取顺序.(对应id) ②数据读取操作的操作类型.(对应select_type) ③哪些索引可以使用.(对应possible_keys) ④哪些索引被实际使用.(对应k…