mysql临时表

MySQL进阶篇(01):基于多个维度,分析服务器性能

核能气质少年 提交于 2020-04-08 00:59:08
本文源码: GitHub·点这里 || GitEE·点这里 一、服务器性能简介 1、性能定义 服务器性能优化是一项非常艰巨的任务,当然也是很难处理的问题,在写这篇文章的时候,特意请教下运维大佬,硬件工程师,数据库管理,单从自己的实际开发经验来看,看待这个问题的角度起码是不全面的。 补刀一句 :在公司靠谱少撕逼,工程师这个群体是很好交朋友的,互相学习一起进步,升职加薪他不好吗? 服务性能定义:完成一个任务或者处理一次接口请求所需要的时间,这个时间是指响应完成时间,即请求发出,到页面响应回显结束,这是看待性能问题的基本逻辑。 2、分析性能 服务的基本过程一般如下图,这是一张最简单的前后端分离,加一台数据库存储的流程,但是想要说明一个复杂的逻辑。 从页面请求,到获取完整的响应结果,这个过程每个环节都可能导致性能问题,抛开网络,硬件,服务器,MySQL存储这些核心客观因素,单是下面这行代码就可以秒掉很多人的努力。 Thread.sleep(10000); // 仿佛整个世界都安静了。 影响性能的因素很多,一般说性能优化会从下面几个方面考虑: 网络传输,比如私有云和公有云的交互,接口传输内容过大; 应用服务,接口设计是否最简,没有逻辑问题,架构设计是否合理; 存储服务,MySQL的查询写入,表设计是否合理,连接池配置是否合理; 硬件设施,CPU和内存的利用是否在合理区间,缓存是否合理;

MySQL临时表

假如想象 提交于 2020-04-07 17:18:31
概述 MySQL中临时表主要有两类,包括外部临时表和内部临时表。 外部临时表是通过语句create temporary table...创建的临时表,临时表只在本会话有效,会话断开后,临时表数据会自动清理。 内部临时表主要有两类,一类是information_schema中临时表,另一类是会话执行查询时,如果执行计划中包含有“Using temporary”时,会产生临时表。 内部临时表与外部临时表的一个区别在于,我们看不到内部临时表的表结构定义文件frm。 而外部临时表的表定义文件frm,一般是以#sql{进程id}_{线程id}_序列号组成,因此不同会话可以创建同名的临时表。 临时表 临时表与普通表的主要区别在于是否在实例,会话,或语句结束后,自动清理数据。 比如,内部临时表,我们在一个查询中,如果要存储中间结果集,而查询结束后,临时表就会自动回收,不会影响用户表结构和数据。 另外就是,不同会话的临时表可以重名,所有多个会话执行查询时,如果要使用临时表,不会有重名的担忧。 5.7引入了临时表空间后,所有临时表都存储在临时表空间(非压缩)中,临时表空间的数据可以复用。 临时表并非只支持Innodb引擎,还支持myisam引擎,memory引擎等。 因此,临时表我们看不到实体(idb文件),但其实不一定是内存表,也可能存储在临时表空间中。 临时表 VS 内存表

MySQL进阶篇(01):基于多个维度,分析服务器性能

倾然丶 夕夏残阳落幕 提交于 2020-04-05 17:44:05
本文源码: GitHub·点这里 || GitEE·点这里 一、服务器性能简介 1、性能定义 服务器性能优化是一项非常艰巨的任务,当然也是很难处理的问题,在写这篇文章的时候,特意请教下运维大佬,硬件工程师,数据库管理,单从自己的实际开发经验来看,看待这个问题的角度起码是不全面的。 补刀一句 :在公司靠谱少撕逼,工程师这个群体是很好交朋友的,互相学习一起进步,升职加薪他不好吗? 服务性能定义:完成一个任务或者处理一次接口请求所需要的时间,这个时间是指响应完成时间,即请求发出,到页面响应回显结束,这是看待性能问题的基本逻辑。 2、分析性能 服务的基本过程一般如下图,这是一张最简单的前后端分离,加一台数据库存储的流程,但是想要说明一个复杂的逻辑。 从页面请求,到获取完整的响应结果,这个过程每个环节都可能导致性能问题,抛开网络,硬件,服务器,MySQL存储这些核心客观因素,单是下面这行代码就可以秒掉很多人的努力。 Thread.sleep(10000); // 仿佛整个世界都安静了。 影响性能的因素很多,一般说性能优化会从下面几个方面考虑: 网络传输,比如私有云和公有云的交互,接口传输内容过大; 应用服务,接口设计是否最简,没有逻辑问题,架构设计是否合理; 存储服务,MySQL的查询写入,表设计是否合理,连接池配置是否合理; 硬件设施,CPU和内存的利用是否在合理区间,缓存是否合理;

sql语句性能优化

社会主义新天地 提交于 2020-04-03 21:37:55
面试的时候被面试官问到sql语句的性能优化,回来百度才发现我了解的那些真的是凤毛麟角,废话不多说,上干货: 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2,应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。 3,应尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。 4,应尽量避免在 where 子句中使用 or 来连接条件, 否则将导致引擎放弃使用索引而进行全表扫描, 可以 使用UNION合并查询: select id from t where num=10 union all select id from t where num=20 5,in 和 not in 也要慎用,否则会导致全表扫描,对于连续的数值,能用 between 就不要用 in 了:Select id from t where num between 1 and 3 6,下面的查询也将导致全表扫描:select id from t where name like ‘%abc%’ 或者select id from t

【20190404】MySQL疑难杂症-1034

泪湿孤枕 提交于 2020-03-30 11:45:01
目的 写文章的目的只是为了记录一下工作中遇到的一些实际问题,方便后续自己的复习。 问题描述 收到来自于开发的一个问题描述,说是在UAT环境给一张表加一个字段,但是怎么操作都是错误,如图: 问题解析 其实第一眼看上去的时候,这个错误信息给我的感觉就是这个表的数据字典出了问题,需要进行修复,但是执行下面操作的时候一直是提示是失败,这个时候就需要求助强大的google的了,通过google了一番的话,大部分提示都是和临时表的表空间有关联。 通过上面的截图我们可以很明显的看到这张表的磁盘大小是5G以上,由于是online 添加字段所以肯定是会创建临时表的,但是临时表是在根目录下面的 /tmp下面,可以看到根目录剩下的空间只有2.9G,没有足够的空间创建临时表的 。所以才会抛出上述的这个错误信息。 问题解决 将根目录下面的一些磁盘空间清楚,保证有足够的空间在线执行online DDL,建议最好是线下无业务的时候执行,不推荐这种方式在数据量比较大的时候。 使用percona的pt-online-schema-change命令。 来源: 51CTO 作者: liuhuang9496 链接: https://blog.51cto.com/11819159/2374043

Mysql-windows安装

为君一笑 提交于 2020-03-23 17:14:06
1.mysql下载 Mysql-window下载 1.1 环境变量配置 1)首先在官网下载最新的mysql8.0.11数据库,解压到你需要放置的盘符最好不要有中文,然后新建MYSQL_HOME 2)参数为mysql解压后安装文件的bin文件路径如我的: 变量名:MYSQL_HOME 变量值:E:\tools\database\mysql\mysql8.0.11\mysql-8.0.11-winx64\bin 3)然后在Path变量开头添加%MYSQL_HOME%;然后确定保存即可 2.创建my.ini 在解压后的目录中,如:E:\tools\database\mysql\mysql8.0.11\mysql-8.0.11-winx64 创建my.ini文件,并创建数据目录。文件内容如下: [client] port=3306 [mysql] no-beep # default-character-set= [mysqld] port=3306 # mysql根目录 (修改点!) basedir=D:\\software\\mysql-8.0.11-winx64 # 放所有数据库的data目录 (修改点!) datadir=D:\\software\\mysql-8.0.11-winx64\\data # character-set-server=utf8mb4 #

MySQL如何创建临时表

时光怂恿深爱的人放手 提交于 2020-03-18 22:22:18
mysql 利用 temporary 关键字就可以创建出一个临时表。创建的这张表会在与服务器的会话终止时自动消失 语法:create temporary table tbl_name...; 规则:每个会话只能看到自己创建的临时表,不同的会话可以创建相同表名称的临时表。临时表的表名可以和永久表的名字相同。 好处:可以利用临时表保存一些临时数据,断开会话自动清除数据 坏处:1.与服务器意外断开会话,临时表将被删除。    2.临时表只对创建会话可见,所以和线程池连接技术不能同时共用    3.可能会跟永久表冲突,导致重连之后误操作永久表种的数据。为了避免删除相同表名的永久表,执行删除表结构的时候可以使用drop temporary table_name; 创建一个临时表 create temporary table student_copy(   id int primary key,   name varchar(20) )Engine=InnoDB default charset utf8 临时表创建完成,用show tables 看不见 MySQL什么时候创建临时表: https://mp.weixin.qq.com/s/r1-PuEGDdlLA6zE5pzjb2w 来源: https://www.cnblogs.com/hetaoyuan/p/12520708.html

MySQL内存表-临时表

◇◆丶佛笑我妖孽 提交于 2020-03-13 20:22:12
HEAP表是访问数据速度最快的MySQL表,他使用保存在内存中的散列索引。但如果MySQL或者服务器重新启动,表中数据将会丢失. 用法:如论坛的在线人数统计,这种表的数据应该是无关紧要的,就几个简单的字段,数据也不多,记录数怎么也不会超过1000吧,但是操作是最频繁的(基本用户的每次动作都要更新这个表). 如何创建内存表? 创建内存表非常的简单,只需注明 ENGINE= MEMORY 即可: 1 CREATE TABLE `tablename` ( `columnName` varchar(256) NOT NUL) ENGINE=MEMORY DEFAULT CHARSET=latin1 MAX_ROWS=100000000; 注意: 当内存表中的数据大于max_heap_table_size设定的容量大小时,mysql会转换超出的数据存储到磁盘上,因此这是性能就大打折扣了,所 以我们还需要根据我们的实际情况调整max_heap_table_size,例如在.cnf文件中[mysqld]的下面加入: max_heap_table_size = 2048M 另外在建表语句中还可以通过MAX_ROWS来控制表的记录数。 内存表使用哈希散列索引把数据保存在内存中,因此具有极快的速度,适合缓存中小型数据库,但是使用上受到一些限制。 1、heap对所有用户的连接是可见的

笔记:MySQL相关知识

孤街醉人 提交于 2020-03-12 09:03:48
MySQL背景介绍 MySQL发展史 MySQL分支介绍 MySQL的优点 MySQL数据库组成 MySQL的原理 MySQL执行流程 MySQL日志 MySQL事务、锁、索引与SQL优化 MySQL背景介绍 随着互联网企业的兴起,例如阿里巴巴、网易、Yahoo、Facebook等大型互联网公司的推动,目前Mysql已经成为世界上最流行的数据库,并一步步开始占领了原有商业数据库的市场,目前Mysql已经成为互联网公司甚至部分传统公司的首选数据库。 MySQL发展史 最初为AB公司的产品,Mysql5.0及之前的版本均由AB公司管理,在2008年的时候AB公司被Sun公司收购,Mysql也就归属到了Sun公司下,但在Sun还没待多久,Sun公司就被Oracle公司收购了,此期间诞生了一个Sun向Oracle的过渡版本:Mysql5.5(5.1-5.5之间没有发布过版本),直至5.6Mysql就彻底归属于Oracle公司旗下了,从Oracle收购Mysql以来,Mysql发展的速度及新的功能越来越强大,逐步向Oracle靠拢,如:表空间、redo、undo分离、隐藏索引,至2019年,Mysql8.0.15已经GA(官方发布稳定版本),整体发展过程如下(AB版本不做加入): 5.1 → 5.5 → 5.6 → 5.7 → 8.0 MySQL分支介绍 MySQL 是一个开源数据库

MYSQL基础语句(自我记忆)

浪子不回头ぞ 提交于 2020-03-10 10:34:55
一.操作数据库 1.查看所有数据库 : show databases; 2.创建数据库 : create database name(数据库名); 3.删除数据库 : drop database name (数据库名); 4.连接数据库 : use name (数据库名); 二.操作表 1.查看所有表 : show tables; 2.创建表 : create table name(表名)(id INT,name VARCHAR(10) ); // id 字段名, INT、VARCHAR 字段类型,(10) 字段可放的数据大小,可以给字段设置一些属性,如:not null(不为空)等; 3.创建一个与已存在的表数据结构类似的表 : create table 新表名 like 旧表名; 4.创建临时表 : create temporary table 表名 (id INT,name VARCHAR(10) ); //临时表 此次连接数据库存在,断开此次连接即被数据库自动删除,也可手动删除; 5.查询表 : select * from databasename.tablename;//databasename 数据库名,tablename 表名; 6.将查询到的内容放到一个临时表 : create temporary table 表名 select * from