![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
文章平均质量分 62
☞空白页
这个作者很懒,什么都没留下…
展开
-
case when的判断顺序_CASE 表达式
一、语法及作用使用CASE表达式可以帮助我们解决复杂的查询问题,相当于条件判断的函数,判断每一行是不是满足条件。CASE WHEN (判断表达式) THEN (表达式) WHEN (判断表达式) THEN (表达式) WHEN (判断表达式) THEN (表达式) .... ELSE(表达式)END;CASE 表达式会从对最初的WHEN子句中的“< 求值表达式 >”进行求值开始执行。所谓求值,就是要调查该表达式的真值是什么。如果结果为真...转载 2021-11-19 17:20:11 · 1928 阅读 · 0 评论 -
MYSQL的递归查询
众所周知,目前的mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,还是可以在一句SQL内实现树的递归查询的。这个得益于Mysql允许在SQL语句内使用@变量。以下是示例代码。...转载 2021-06-18 11:15:38 · 322 阅读 · 0 评论 -
MySQL高级知识(十六)——小表驱动大表
前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里。在查询的优化中永远小表驱动大表。1.为什么要小表驱动大表呢类似循环嵌套for(int i=5;.......){for(int j=1000;......){}}如果小的循环在外层,对于数据库连接来说就只连接5次,进行5000次操作,如果1000在外,则需要进行1000次数据库连接,从而浪费资源,增加消耗。这就是为什么要小表驱动大表。2.数据准备根据MySQL高级知识原创 2020-10-30 09:44:09 · 616 阅读 · 0 评论 -
MySQL高级知识(十五)——主从复制
前言:本章主要讲解MySQL主从复制的操作步骤。由于环境限制,主机使用Windows环境,从机使用用Linux环境。另外MySQL的版本最好一致,笔者采用的MySQL5.7.22版本,具体安装过程请查询相关资料。1.主从复制的基本原理slave会从master读取binlog来进行数据同步。主要有以下三个步骤:①master将改变记录到二进制日志(binary log),这些记录过程叫做二进制日志事件(binary log events)。②slave将master的binary log e转载 2020-10-30 09:42:45 · 91 阅读 · 1 评论 -
MySQL高级知识(十四)——行锁
前言:前面学习了表锁的相关知识,本篇主要介绍行锁的相关知识。行锁偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,但并发度高。0.准备#1.创建相关测试表tb_innodb_lock,注意数据库引擎为InnoDB。drop table if exists test_innodb_lock;CREATE TABLE test_innodb_lock (a INT (11),b VARCHAR (20)) ENGINE INNODB DEFAULT原创 2020-10-30 09:42:28 · 222 阅读 · 0 评论 -
MySQL高级知识(十三)——表锁
前言:锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算机资源(如CPU、RAM、I/O等)的争用外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。1.锁的分类#1.从对数据操作的类型来分读锁(共享锁)和写锁(排它锁)#2.从对数据操作的粒度来分表锁和行锁2.表锁(偏读)特点:偏向MyISAM存储引原创 2020-10-30 09:42:13 · 124 阅读 · 0 评论 -
MySQL高级知识(十二)——全局查询日志
前言:全局查询日志用于保存所有的sql执行记录,该功能主要用于测试环境,在生产环境中永远不要开启该功能。1.如何开启#1.通过my.cnf配置开启该功能。注:对my.cnf文件配置后,需重启mysql。①通过命令查看全局查询日志是否开启成功。②查看全log_globalquery.log文件中的内容。该log文件记录执行过的sql语句。#2.通过命令开启该功能。通过以上配置,执行过的sql语句将会记录到mysql...原创 2020-10-30 09:41:57 · 120 阅读 · 0 评论 -
MySQL高级知识(十一)——Show Profile
前言:Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量。默认情况下处于关闭状态,并保存最近15次的运行结果。1.分析步骤#1.开启Show Profile功能,默认该功能是关闭的,使用前需开启。#2.根据MySQL高级知识(十)——批量插入数据脚本中的数据脚本向tb_emp_bigdata表中插入50w条数据。然后执行如下查询语句:select *from tb_emp_bigdata group by..转载 2020-10-30 09:41:40 · 120 阅读 · 0 评论 -
MySQL高级知识(十)——批量插入数据脚本
前言:使用脚本进行大数据量的批量插入,对特定情况下测试数据集的建立非常有用。0.准备#1.创建tb_dept_bigdata(部门表)。create table tb_dept_bigdata(id int unsigned primary key auto_increment,deptno mediumint unsigned not null default 0,dname varchar(20) not null default '',loc varchar(13) not原创 2020-10-29 16:23:38 · 125 阅读 · 0 评论 -
MySQL高级知识(九)——慢查询日志
前言:慢查询日志是MySQL提供的一种日志记录,它记录MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的sql语句,该sql语句会被记录到慢查询日志中。慢查询日志主要与explain进行联合分析。1.如何开启慢查询日志默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。如果不是调优需要,一般不建议开启该参数,因为开启慢查询日志或多或少会带来一定的性能影响。#1.首先查看慢查询日志是否开启。注:Value为OFF表示..转载 2020-10-29 16:22:47 · 164 阅读 · 0 评论 -
MySQL高级知识(八)——ORDER BY优化
前言:在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index。0.准备#1.创建test表。drop table if exists test;create table test(id int primary key auto_increment,c1 varchar(10),c2 varchar(10),c3 varchar(10),c4 varchar(10),c5 varchar(10原创 2020-10-29 16:21:42 · 73 阅读 · 0 评论 -
MySQL高级知识(七)——索引面试题分析
前言:该篇随笔通过一些案例,对索引相关的面试题进行分析。0.准备#1.创建test表(测试表)。drop table if exists test;create table test(id int primary key auto_increment,c1 varchar(10),c2 varchar(10),c3 varchar(10),c4 varchar(10),c5 varchar(10)) ENGINE=INNODB default CHARSET=ut原创 2020-10-29 16:20:40 · 97 阅读 · 0 评论 -
MySQL高级知识(六)——索引优化
前言:索引优化的目的主要是让索引不失效,本篇通过相关案例对索引优化进行讲解。0.准备创建经典的tb_emp表。DROP TABLE IF EXISTS `tb_emp`;CREATE TABLE `tb_emp` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,`age` int(11) NOT NULL,gender varchar(10) NOT NULL,email varchar(原创 2020-10-29 16:19:15 · 55 阅读 · 0 评论 -
MySQL高级知识(五)——索引分析
前言:前面已经学习了explain(执行计划)的相关知识,这里利用explain对索引进行优化分析。0.准备首先创建三张表:tb_emp(职工表)、tb_dept(部门表)和tb_desc(描述表)1)tb_emp表。DROP TABLE IF EXISTS `tb_emp`;CREATE TABLE `tb_emp` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(20) NOT NULL,`deptid`原创 2020-10-29 16:17:11 · 76 阅读 · 0 评论 -
MySQL高级知识(四)——Explain
前言:explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句。explain主要用于分析查询语句或表结构的性能瓶颈。注:本系列随笔如无特殊说明都MySQL版本都为5.7.22。1.explain的作用通过explain+sql语句可以知道如下内容:①表的读取顺序。(对应id)②数据读取操作的操作类型。(对应select_type)③哪些索引可以使用。(对应possible_keys)④哪些索引被实际使用。(对应原创 2020-10-29 16:15:38 · 67 阅读 · 0 评论 -
MySQL高级知识(三)——索引
前言:索引在sql调优部分占据着重要的位置,了解并深入索引对我们来说也是非常重要的。本篇主要介绍MySQL中索引的相关知识点。1.索引是什么MySQL官方对索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构。因此索引的本质就是数据结构。索引的目的在于提高查询效率,可类比字典、书籍的目录等这种形式。可简单理解为“排好序的快速查找数据结构”。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高级查找算法,这种数据原创 2020-10-29 16:12:37 · 65 阅读 · 0 评论 -
MySQL高级知识(二)——Join查询
前言:该篇主要对MySQL中join语句的七种情况进行总结。0.准备join主要根据两表或多表之间列的关系,从这些表中进行数据的查询。首先创建两张表:tb_emp(员工表)和tb_dept(部门表),并插入相关测试数据。1.tb_emp表。DROP TABLE IF EXISTS `tb_emp`;CREATE TABLE `tb_emp` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,原创 2020-10-29 16:11:39 · 202 阅读 · 0 评论 -
MySQL高级知识(一)——基础
MySQL高级知识(一)——基础前言:MySQL高级知识1.关于MySQL的一些文件MySQL如何安装、如何配置自启动,这里不进行讲述,可自行搜索相关安装教程进行处理。这里主要介绍MySQL的主要配置文件。①二进制日志log-bin:用于主从复制。②错误日志log-error:默认关闭,记录严重的警告和错误信息,每次启动和关闭的详细信息等。③查询日志show-log:默认关闭,记录查询的sql语句,如果开启会降低mysql的整体性能,因为记录日志也是需要消耗系统资源的。④f...原创 2020-10-29 16:06:39 · 283 阅读 · 0 评论