课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
MySQL数据库是程序员在学习软件开发技术的时候会接触到的一个技术类型,而今天我们就通过案例分析来了解一下,MySQL数据库临时表的应用。
在MySQL中的排序一文中就说到如果orderby的列上没有索引,或者说没有用到索引,那么就需要进行额外排序(usingfilesort),而额外排序优先在一块sort_buffer空间中进行,如果这块空间大小小于要加载的字段总长度,那么就会用到临时文件辅助排序,这个临时文件就是临时表。临时表的作用就是作为中间表优化操作,比如groupby作为分组的中间表,orderbyrand()(MySQL中的排序中的例子)作为中间表帮助运算等。
特点
1、建表语法是createtemporarytable…。
2、一个临时表只能被创建它的session访问,对其他线程不可见,在会话结束后自动删除。所以,图中sessionA创建的临时表t,对于sessionB就是不可见的。(所以特别适合用于join优化)
3、临时表可以与普通表同名。
4、sessionA内有同名的临时表和普通表的时候,showcreate语句,以及增删改查语句访问的是临时表。
5、showtables命令不显示临时表。
种类
临时表分为磁盘临时表和内存临时表。磁盘临时表指的是存储在磁盘上的临时表,因为在磁盘上,所以执行效率比较低,优点结构可以是有序的,实现可以是InnoDB(默认),MyISAM引擎;内存临时表就是存储在内存中,执行效率高,常用的实现引擎是Memory。
磁盘临时表和内存临时表的区别
1、相比于InnoDB表,使用内存表不需要写磁盘,往表temp_t的写数据的速度更快;
2、索引b使用hash索引,查找的速度比B-Tree索引快;
3、临时表数据只有2000行,占用的内存有限。
Memory引擎
与InnoDB的区别
1、InnoDB表的数据总是有序存放的,而内存表的数据就是按照写入顺序存放的;关于这点可以通过创建b+索引来进行排序,优化查询。altertablet1addindexa_btree_indexusingbtree(id);
2、当数据文件有空洞的时候,InnoDB表在插入新数据的时候,为了保证数据有序性,只能在固定的位置写入新值,而内存表找到空位就可以插入新值;
3、数据位置发生变化的时候,InnoDB表只需要修改主键索引,而内存表需要修改所有索引;
4、InnoDB表用主键索引查询时需要走一次索引查找,用普通索引查询的时候,需要走两次索引查找。而内存表没有这个区别,所有索引的“地位”都是相同的。
5、InnoDB支持变长数据类型,不同记录的长度可能不同;内存表不支持Blob和Text字段,并且即使定义了varchar(N),实际也当作char(N),也就是固定长度字符串来存储,因此内存表的每行数据长度相同。
6、内存表支持hash索引,并且数据存储在内存中,所以执行比数据存储在磁盘上的Innodb快。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。