202103-19 mysql的联合索引(复合索引)的实现 联合索引本文中联合索引的定义为(MySQL):ALTERTABLE`table_name`ADDINDEX(`col1`,`col2`,`col3`);联合索引的优点若多个一条SQL,需要多个用到两个条件SELECT*FROM`user_info`WHEREusername='XX',password='XXXXXX';当索引在检索password字段的时候,数据量大大缩小,索引的命中率减小,增大了索引的效率。符合索引的索引体积比单独索引的体积要小,而且只是一个索引树,相比单独列的索引要更加的节省时间复杂度和空... 继续阅读 >
202103-19 Mysql性能优化之索引下推 索引下推(indexconditionpushdown)简称ICP,在Mysql5.6的版本上推出,用于优化查询。在不使用ICP的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查询时,存储引擎通过索引检索到数据,然后返回给MySQL服务器,服务器然后判断数据是否符合条件。在使用ICP的情况下,如果存在某些被索引的列的判断条件时,MySQL服务器将这一部分判断条件传递给存储引擎,然后由存储引擎通过判断索引是否符合MySQL服务器传递的条件... 继续阅读 >
202103-19 MySQL中sum函数使用的实例教程 文章简介今天分享一下MySQL中的sum函数使用。该函数已经成为大家操作MySQL数据库中时常用到的一个函数,这个函数统计满足条件行中指定列的和,想必肯定大家都知道了,本身就没什么讲头了,这篇文章主要是通过几个小案例深入了解一下该函数,以及在做MySQL查询时如何使用sum函数做优化。语法分析SUM([DISTINCT]expr)[over_clause]Returnsthesumofexpr.Ifthereturnsethasnorows,SUM()returnsNULL.TheDISTINCTke... 继续阅读 >
202103-17 浅谈为什么MySQL不推荐使用子查询和join 做分页查询:1.对于mysql,不推荐使用子查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据。2.子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。3.如果是JOIN的话,它是走嵌套查询的。小表驱动大表,且通过索引字... 继续阅读 >
202103-17 MySQL中 and or 查询的优先级分析 这个可能是容易被忽略的问题,首选我们要清楚:MySQL中,AND的执行优先级高于OR。也就是说,在没有小括号()的限制下,总是优先执行AND语句,再执行OR语句。比如:select*fromtablewhere 条件1AND 条件2OR条件3等价于select*fromtablewhere (条件1 AND 条件2) OR 条件3select*fromtablewhere 条件1AND 条件2OR 条件3AND条件4等价于select*from... 继续阅读 >
202103-17 MySQL中 and or 查询的优先级分析 这个可能是容易被忽略的问题,首选我们要清楚:MySQL中,AND的执行优先级高于OR。也就是说,在没有小括号()的限制下,总是优先执行AND语句,再执行OR语句。比如:select*fromtablewhere 条件1AND 条件2OR条件3等价于select*fromtablewhere (条件1 AND 条件2) OR 条件3select*fromtablewhere 条件1AND 条件2OR 条件3AND条件4等价于select*from... 继续阅读 >
202103-17 MySQL中查看数据库安装路径的方法 我们可以通过mysql命令查看mysql的安装路径:#以下两个sql任意一个可查询select@@basedirasbasePathfromdual;showvariableslike'%basedir%';上面可以看到基础的安装路径,查看数据库data的路径怎么看,很简单,把上面的参数变量换成datadir即可:#以下查询任意一个均可select@@datadirasdataPathfromdual;showvariablesLike'%datadir%';当然上面是基于能登录到mysql窗口下查看才能操作,那么朋友会问,如果也... 继续阅读 >
202103-17 细说mysql replace into用法 replace语句在一般的情况下和insert差不多,但是如果表中存在primary或者unique索引的时候,如果插入的数据和原来的primarykey或者unique相同的时候,会删除原来的数据,然后增加一条新的数据,所以有的时候执行一条replace语句相当于执行了一条delete和insert语句。直接上实例吧:新建一个test表,三个字段,id,title,uid, id是自增的主键,uid是唯一索引;CREATETABLE`test`(`Id`int(11)NOTNULLAUTO_INCREMENT... 继续阅读 >
202103-17 mysql触发器trigger实例详解 MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概念性的东西吧:什么是触发器触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。举个例子,比如你现在有两个表【用户表】和【日志表】,当一个用户被创建的时候,就需要在日志表中插入创建的log日志,如果在不使用触发器的情况下,你需要编... 继续阅读 >
202103-15 MySQL 5.6主从报错的实战记录 1.问题现象版本:MySQL5.6,采用传统binlogfile&pos方式配置的主从复制结构。实例重启后,主从复制报错如上图所示。2.错误含义错误分为2部分。第一部分Clientrequestedmastertostartreplicationfromposition>filesize;thefirstevent'mysql-bin.000398'at163800795,thelasteventreadfrom'./mysql-binlog.000398'at4,thelastbytereadfrom'./mysql-bin.000398'at4'第一部分这部分来源于主... 继续阅读 >
202103-09 Mysql 索引该如何设计与优化 什么是索引?数据库索引是一种数据结构,它以额外的写入和存储空间为代价来提高数据库表上数据检索操作的速度。通俗来说,索引类似于书的目录,根据其中记录的页码可以快速找到所需的内容。——维基百科常见索引有哪些?普通索引:最基本的索引,没有任何限制唯一索引:与”普通索引“类似,不同的就是:索引列的值必须是唯一,但允许有空值主键索引:它是一种特殊的索引,不允许有空值全文索引:仅可用于MyISAM表,针对... 继续阅读 >
202103-09 MySQL Group by的优化详解 一个标准的Groupby 语句包含排序、分组、聚合函数,比如 selecta,count(*)fromtgroupbya; 这个语句默认使用a 进行排序。如果a 列没有索引,那么就会创建临时表来统计a和count(*),然后再通过sort_buffer 按a 进行排序。标准的执行流程结构:createtablet1(idintprimarykey,aint,bint,index(a));delimiter;;createprocedureidata()begindeclareiint;seti=1;... 继续阅读 >
202103-09 详解MySQL kill 指令的执行原理 kill 指令有两种写法"killquery+ 线程id"、"killconnection(可缺省)+ 线程id"。分别表示关闭指定线程正在执行的语句、断开指定线程连接的客户端(如果有正在执行的操作会先停止执行的操作再关闭连接)。但某些情况下使用killquery 后使用showprocesslist 查看Command 列为killed(表示 正在等待回收线程回收,还未回收),这是为什么呢?在解答这个问题前,需要知道服务器端... 继续阅读 >
202103-09 MySQL 复制表的方法 1、mysqldump执行过程:一、将数据导出为sql 文件。mysqldump-h$host-P$port-u$user--add-locks=0--no-create-info--single-transaction--set-gtid-purged=OFFdb1t--where="a>900"--result-file=/client_tmp/t.sql将数据导出为sql 文件保存。上面几个参数的含义分别是:1、?single-transaction的作用是,在导出数据的时候不需要对表db1.t加表锁,而是使用STARTTRANSACTIONWITHCONSISTENTSNAPSHOT... 继续阅读 >
202103-09 SpringBoot+Mybatis-Plus实现mysql读写分离方案的示例代码 1.引入mybatis-plus相关包,pom.xml文件2.配置文件application.property增加多库配置mysql数据源配置spring.datasource.primary.jdbc-url=jdbc:mysql://xx.xx.xx.xx:3306/portal?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&characterEncoding=utf8&serverTimezone=GMT%2B8spring.datasource.primary.username=rootspring.datasource.primary.password=rootspring... 继续阅读 >
202103-09 MySQL处理JSON常见函数的使用 官方文档:JSONFunctionsNameDescriptionJSON_APPEND()AppenddatatoJSONdocumentJSON_ARRAY()CreateJSONarrayJSON_ARRAY_APPEND()AppenddatatoJSONdocumentJSON_ARRAY_INSERT()InsertintoJSONarray->ReturnvaluefromJSONcolumnafterevaluatingpath;equivalenttoJSON_EXTRACT... 继续阅读 >