临时表

临时表顾名思义,就是临时的,用完销毁掉的表。 数据既可以保存在临时的文件系统上,也可以保存在固定的磁盘文件系统上。

临时表有下面几种:

1、全局临时表

这种临时表从数据库实例启动后开始生效,在数据库实例销毁后失效。在MySQL里面这种临时表对应的是内存表,即memory引擎。

2、会话级别临时表

这种临时表在用户登录系统成功后生效,在用户退出时失效。在MySQL里的临时表指的就是以create temporary table这样的关键词创建的表。

3、事务级别临时表

这种临时表在事务开始时生效,事务提交或者回滚后失效。 在MySQL里面没有这种临时表,必须利用会话级别的临时表间接实现。

4、检索级别临时表

这种临时表在SQL语句执行之间产生,执行完毕后失效。 在MySQL里面这种临时表不是很固定,跟随MySQL默认存储引擎来变化。比如默认存储引擎是MyISAM,临时表的引擎就是MyISAM,并且文件生成形式以及数据运作形式和MyISAM一样,只是数据保存在内存里;如果默认引擎是INNODB,那么临时表的引擎就是INNODB,此时它的所有信息都保存在共享表空间ibdata里面。

MySQL 5.7之临时表空间

MySQL 5.7对于InnoDB存储引擎的临时表空间做了优化。在MySQL 5.7之前,INNODB引擎的临时表都保存在ibdata里面,而ibdata的贪婪式磁盘占用导致临时表的创建与删除对其他正常表产生非常大的性能影响。在MySQL5.7中,对于临时表做了下面两个重要方面的优化:

1、MySQL 5.7 把临时表的数据以及回滚信息(仅限于未压缩表)从共享表空间里面剥离出来,形成自己单独的表空间,参数为innodb_temp_data_file_path。

2、在MySQL 5.7 中把临时表的相关检索信息保存在系统信息表中:information_schema.innodb_temp_table_info. 而MySQL 5.7之前的版本想要查看临时表的系统信息是没有太好的办法。

需要注意的一点就是:虽然INNODB临时表有自己的表空间,但是目前还不能自己定义临时表空间文件的保存路径,只能是继承innodb_data_home_dir。此时如果想要拿其他的磁盘,比如内存盘来充当临时表空间的保存地址,只能用老办法,做软链。举个小例子:

我现在用的OS是 Ubuntu12.X,想用tmpfs文件系统充当临时表空间,

root@ytt-master-VirtualBox:/usr/local/mysql/data# ln -s/run/shm/ /usr/local/mysql/data/tmp_space2

root@ytt-master-VirtualBox:/usr/local/mysql/data#ls -l | grep 'shm'

lrwxrwxrwx1 root root 9 Nov 13 10:28tmp_space2 -> /run/shm/

然后把innodb_temp_data_file_path=tmp_space2/ibtmp2:200M:autoextend添加到my.cnf里的[mysqld]下面一行, 重启MySQL服务后:

mysql>select @@innodb_temp_data_file_path\G

***************************1. row ***************************

@@innodb_temp_data_file_path:tmp_space2/ibtmp2:200M:autoextend

1 rowin set (0.00 sec)

先写一个批量创建临时表的存储过程:

DELIMITER$$

USE`t_girl`$$

DROPPROCEDURE IF EXISTS `sp_create_temporary_table`$$

CREATEDEFINER=`root`@`localhost` PROCEDURE `sp_create_temporary_table`(

IN f_cnt INT UNSIGNED )

BEGIN

DECLARE i INT UNSIGNED DEFAULT 1;

WHILE i <= f_cnt

DO

SET @stmt = CONCAT('create temporarytable tmp',i,' ( id int, tmp_desc varchar(60));');

PREPARE s1 FROM @stmt;

EXECUTE s1;

SET i = i + 1;

END WHILE;

DROP PREPARE s1;

END$$

DELIMITER;

现在来创建10张临时表:

mysql>call sp_create_temporary_table(10);

QueryOK, 0 rows affected (0.07 sec)

如果在以前,我们只知道创建了10张临时表,但是只能凭记忆或者手工记录下来临时表的名字等信息。

现在可以直接从数据字典里面检索相关数据。

mysql> select * frominformation_schema.innodb_temp_table_info;

+----------+--------------+--------+-------+----------------------+---------------+

|TABLE_ID | NAME | N_COLS | SPACE| PER_TABLE_TABLESPACE | IS_COMPRESSED |

+----------+--------------+--------+-------+----------------------+---------------+

| 56 | #sql1705_2_9 | 5 | 36 | FALSE |FALSE |

| 55 | #sql1705_2_8 | 5 | 36 | FALSE |FALSE |

| 54 | #sql1705_2_7 | 5 | 36 | FALSE |FALSE |

| 53 | #sql1705_2_6 | 5 | 36 | FALSE |FALSE |

| 52 | #sql1705_2_5 | 5 | 36 | FALSE |FALSE |

| 51 | #sql1705_2_4 | 5 | 36 | FALSE |FALSE |

| 50 | #sql1705_2_3 | 5 | 36 | FALSE |FALSE |

| 49 | #sql1705_2_2 | 5 | 36 | FALSE |FALSE |

| 48 | #sql1705_2_1 | 5 | 36 | FALSE |FALSE |

| 47 | #sql1705_2_0 | 5 | 36 | FALSE |FALSE |

+----------+--------------+--------+-------+----------------------+---------------+

10rows in set (0.00 sec)

总结

功能性我就写到这里,大家性能方面如果有兴趣可以找时间去测试。希望本文的内容对大家学习或者使用mysql5.7能带来一定的帮助,如果有疑问大家可以留言交流。

mysql 5.7临时表空间_深度解析MySQL 5.7之临时表空间相关推荐

  1. mysql中show的用法_完全解析MySQL数据库中Show命令用法

    show命令的众多用法如下: a. show tables或show tables from database_name; - 显示当前数据库中所有表的名称. b. show databases; - ...

  2. mysql5.7空间运算,深度解析MySQL5.7之临时表空间

    临时表 临时表顾名思义,就是临时的,用完销毁掉的表. 数据既可以保存在临时的文件系统上,也可以保存在固定的磁盘文件系统上. 临时表有下面几种: 1.全局临时表 这种临时表从数据库实例启动后开始生效,在 ...

  3. mysql表空间_浅谈mysql中各种表空间(tablespaces)的概念

    mysql中,会涉及到各种表空间的概念,虽然,很多方面这些概念和Oracle有相似性,但也有很多不同的地方,初学者很容易被这些概念弄的晕头转向,从而,混淆这些概念的区别和理解,下面,就简要介绍和说明一 ...

  4. 深度解析mysql登录原理

    使用mysql数据库的第一步必然是建立连接登录,然后在上面执行SQL命令.无论是通过mysql的客户端,还是通过C-API,JDBC标准接口连接数据库,这个过程一定少不了.今天我们聊一聊mysql登陆 ...

  5. mysql 导入创建表空间_说说在 Oracle11g 中如何创建表空间、创建用户并授权以及导入与导出数据...

    假设 Oracle11g 已在本机安装成功. 1 创建表空间 打开 sqlplus 工具:开始-->所有程序--> Oracle –OraDb11g_home1-->应用程序开发-- ...

  6. python中superclass是什么_深度解析并实现python中的super(转载,好文)

    大神半个月的成绩,让我看的叹为观止,建议看原帖地址,会让你对Python的描述符有更强的认识. 原文链接:https://blog.csdn.net/zhangjg_blog/article/deta ...

  7. 完整的连接器设计手册_深度解析特斯拉的电池快充连接器技术|附视频

    推荐:GSAuto联盟|三电技术专家委员会,初期仅对主机厂.Tirl1等公司新能源汽车三电研发管理制造方面人员.大学及科研机构等新能源汽车三电研究人员,现已招募480+人,主要分布在50+主机厂.50 ...

  8. mysql 跳表 b 树_简单谈谈Mysql索引与redis跳表

    摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...

  9. mysql表分区数量限制_详解MySQL分区表的局限和限制的代码实例

    本文对Mysql分区表的局限性做了一些总结,因为个人能力以及测试环境的 原因,有可能有错误的地方,还请大家看到能及时指出,当然有兴趣的朋友可以去官方网站查阅. 禁止构建 分区表达式不支持以下几种构建: ...

最新文章

  1. C++11中enum class的使用
  2. C++知识点37——拷贝构造函数
  3. 牛客 [编程题] 回文解码
  4. 零基础可以学python吗-python零基础能学吗
  5. 移动互联网漫谈(4)-移动通信网络
  6. spring boot validated的使用
  7. 从人生(论文)的数量追求人生的质量
  8. [Ajax]ajax学习与理解
  9. Java调用跟踪系统_Tracer:在分布式系统中的调用跟踪和日志相关
  10. java实现HTTP请求的三种方式
  11. 玩转oracle 11g(44):数据库发展历史
  12. 【转载】指导教师的WZ132
  13. 二十五、JAVA多线程(六、线程控制操作)
  14. jeecgboot 查询_Jeecg-Boot 技术文档
  15. linux cat获取ip,linux – “cat / proc / net / dev”和“ip -s link”显示不同的统计信息.哪一个在撒谎?...
  16. java数组和集合的区别_java中数组和集合的区别是什么?
  17. pdfFactory和pdfFactory Pro有什么不同
  18. (实测)天猫商城抢购茅台脚本
  19. 【ionic】无法识别ionic
  20. 【Matlab文件操作】打开、创建、更改和删除文件与文件夹以及获取文件信息

热门文章

  1. python字符串用android,通过s从android客户端向python服务器发送字符串
  2. 机器人售卖雪糕机_智能售货机售货机,冰淇淋厂
  3. Linux 内核调试必备工具
  4. linux 目录说明
  5. 影响生产计划制定的因素_石料生产线选砂石原骨料时的技巧及影响破碎的因素...
  6. oracle按空格拆分列,DB2字符串按照指定符号进行拆分成多个字段的实现方式
  7. 广西师范大学c语言期末试题,广西师范大学 据库原理(A卷).doc
  8. 离散数学专业术语(continuous updating)
  9. matlab 多目标规划
  10. 【 C 】转移表(理论与实践)(实现一个简单的计算器)