202010-08 MySQL 快速删除大量数据(千万级别)的几种实践方案详解 笔者最近工作中遇见一个性能瓶颈问题,MySQL表,每天大概新增776万条记录,存储周期为7天,超过7天的数据需要在新增记录前老化。连续运行9天以后,删除一天的数据大概需要3个半小时(环境:128G,32核,4T硬盘),而这是不能接受的。当然如果要整个表删除,毋庸置疑用TRUNCATETABLE就好。最初的方案(因为未预料到删除会如此慢),代码如下(最简单和朴素的方法):deletefromtable_namewherecnt_date<=target_date后经过研... 继续阅读 >
202010-08 MySql中流程控制函数/统计函数/分组查询用法解析 路漫漫其修远兮,吾将上下而求索,又到了周末,我继续带各位看官学习回顾Mysql知识。上次说到了流程控制函数,那就从流程控制函数来继续学习吧!#五.流程控制函数#1.if函数:ifelse的效果IF(条件表达式,成立返回1,不成立返回2)#与Java三元运算相同SELECTIF(10>5,'大','小');SELECTlast_name,commission_pct,IF(commission_pctISNULL,'没奖金呵呵','有奖金嘻嘻')AS备注FROMemployees;#2.CASE函数的使用一:swirchcase的效果... 继续阅读 >
202010-08 MySql中子查询内查询示例详解 西北望乡何处是,东南见月几回圆。月亮又慢悠悠的挂上了天空,趁着睡前梦呓,我就带领各位可爱的读者们探索MySql最后的子查询部分。说明:有些查询结果出来结果截图与题目要求不一样会出现多余的字段是为了方便展示结果的可读性。实际操作的读者可以删除SELECT后面多余的字段得到正确的结果。#WHERE或HAVING后面#1.标量子查询(单行子查询)#2.列子查询(多行子查询)#3.行子查询(多列多行)#特点:#①子查询放在小括号内#②子查询... 继续阅读 >
202010-08 服务器Centos部署MySql并连接Navicat过程详解 (1)服务器配置:[root@localhost~]#cd/usr/local/src/[root@localhostsrc]#wgethttp://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm[root@localhostsrc]#rpm-ivhmysql57-community-release-el7-8.noarch.rpm"""mysql-community-client-5.7.30-1.el7.x86_64.rpmmysql-community-server-5.7.31-1.el7.x86_64.rpm"""将这两个个rpm包,以FTP形式导入:/var/cache/yum/x86_64/7/mysql57-community/packag... 继续阅读 >
202010-08 MySQL的视图和索引用法与区别详解 MySQL的视图简单来说MySQL的视图就是对SELECT命令的定义的一个快捷键,我们查询时会用到非常复杂的SELECT语句,而这个语句我们以后还会经常用到,我们可以经这个语句生产视图。视图是一个虚拟的表,它不存储数据,所用的数据都在真实的表中。这样做的好处有:1.防止有未经允许的租户访问到敏感数据2.将多个物理表抽象成一个逻辑表3.结果容易理解4.获得数据更容易,很多人对SQL语句不太了解,我们可以通过创建视图的形式方便用户使... 继续阅读 >
202010-08 MySQL索引优化Explain详解 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。--实际SQL,查... 继续阅读 >
202010-08 快速了解MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。创建索引时,你需要确保该索引是应用在SQL查询语句的条件(一般作为WHERE子句的... 继续阅读 >
202010-08 Mysql按条件计数多种实现方法详解 最近在给某网站的后台添加一系列的统计功能,遇到很多需要按条件计数的情况。尝试了几种方法,下面简要记录,供大家参考。问题描述为使讨论简单易懂,我将问题稍作简化,去掉诸多的背景。从前有一个皇帝,他有50个妃子,这些妃子很没有天理的给他生了100,000个儿子,于是,皇帝很苦恼,海量的儿子很难管理,而且,他想知道每个妃子给他生了多少个儿子,从而论功行赏,这很难办。于是,皇帝请了一个程序员帮他编了一个程序,用数据... 继续阅读 >
202010-08 浅谈MySQL 统计行数的 count MySQLcount()函数我们并不陌生,用来统计每张表的行数。但如果你的表越来越大,且是InnoDB引擎的话,会发现计算的速度会越来越慢。在这篇文章里,会先介绍count()实现的原理及原因,然后是count不同用法的性能分析,最后给出需要频繁改变并需要统计表行数的解决方案。Count()的实现InnoDB和MyISAM是MySQL常用的数据引擎,由于两者实现的不同,导致count()操作计算的效率也不同。对于MyISAM来说,它把每个表的总... 继续阅读 >
202010-08 快速学习MySQL基础知识 这篇文章主要梳理了SQL的基础用法,会涉及到以下方面内容:SQL大小写的规范数据库的类型以及适用场景SELECT的执行过程WHERE使用规范MySQL中常见函数子查询分类如何选择合适的EXISTS和IN子查询了解SQLSQL是我们用来最长和数据打交道的方式之一,如果按照功能划分可分为如下4个部分:DDL,数据定义语言。定义数据库对象,数据表,数据列。也就是,对数据库和表结构进行增删改操作。DML,数据操作语言... 继续阅读 >
202010-08 简单了解MySQL存储引擎 1.MySql体系结构在介绍存储引擎之前先来介绍下MySql的体系结构,以便大家知道存储引擎在MySql整个体系中处于什么位置。下图是官方提供的一张架构图:MySQL体系结构图从上图可以发现,MySQL由以下几部分组成:连接池组件管理服务和工具组件SQL接口组件查询分析器组件优化器组件缓冲(Cache)组件插件式存储引擎物理文件MySQL数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎,从上图中也可以... 继续阅读 >
202010-08 浅谈mysql导出表数据到excel关于datetime的格式问题 最近用mysql导出表数据到excel文件,mysql中的datetime类型导出到excel(excel2016)中被excel识别成它自己默认的日期格式了,在mysql中的格式形如yyyy-mm-ddhh:mm:ss,到了excel变成了yyyy/m/dh:mm,看起来不太习惯,当然可以通过设置excel单元格格式改成自定义格式yyyy-mm-ddhh:mm:ss,但是这样多了一个步骤,能不能直接从mysql导出到excel的就是mysql显示的样式呢?当然可以。开始猜想是由于mysql中该字段是datetime类型... 继续阅读 >
202010-08 快速解决mysql导数据时,格式不对、导入慢、丢数据的问题 如果希望一劳永逸的解决慢的问题,不妨把你的mysql升级到mysql8.0吧,mysql8.0默认的字符集已经从latin1改为utf8mb4,因此现在UTF8的速度要快得多,在特定查询时速度提高了1800%!但是如果时间等不及,就先用下面的办法快速解决一下。问题一:格式不对(常出现时间格式不对的情况);方法1:将excel文件另存为csv,再导入数据库;方法2:导入的第一步时,默认编码方式是65001(UTF-8),可以尝试选择【10008(MAC-SimplifiedCh... 继续阅读 >
202010-08 快速解决mysql导出scv文件乱码、蹿行的问题 工作原因,常常不能实现完全的线上化(即,所有数据都在线上完成,不需要导入导出),而导出Excel常常比修炼成仙还慢,因此,我们将数据库文件导出到本地使用的时候,常常使用的方法的是导成CSV格式。而csv格式的也常常出现导出的中文乱码,或者蹿行等问题,从而陷入两难境地。老板要数据,你却导不出来,急死人了。1.问题:我们原本要把如左图所示的数据库中的数据导出成他原本的样子,无奈成了右边的乱七八糟的东西;2.解决:a:... 继续阅读 >
202010-08 MySQL中进行跨库查询的方法示例 前言在MySQL中跨库查询主要分为两种情况,一种是同服务的跨库查询;另一种是不同服务的跨库查询;它们进行跨库查询是不同的,下面就具体介绍这两种跨库查询。一、同服务的跨库查询同服务的跨库查询只需要在关联查询的时候带上数据名,SQL的写法是这样的:SELECT*FROM数据库1.table1xJOIN数据库2.table2yONx.field1=y.field2;例如:二、不同服务的跨库查询不同服务的跨库查询,直接通过数据名加表明是无法进行关联的,这... 继续阅读 >
202010-08 Mysql日期查询的详细介绍 查询当前日期SELECTCURRENT_DATE();SELECTCURDATE();查询当前日期和时间SELECTNOW();查询今天的数据SELECT*FROM`表名`WHERETO_DAYS(NOW())=TO_DAYS(`字段`);SELECT*FROM`表名`WHERETO_DAYS(NOW())-TO_DAYS(`字段`)=0;查询昨天的数据SELECT*FROM``表名``WHERETO_DAYS(`字段`)=TO_DAYS(NOW())-1;SELECT*FROM``表名``WHERETO_DAYS(`字段`)-TO_DAYS(NOW())=-1;SELECT*FROM``表名``WHERETO_DA... 继续阅读 >