mysql怎么存临时表 mysql如何使用临时表( 四 )


普通的磁盘临时表|临时文件(一般需要较小的空间):
??临时表|临时文件的一般所需的空间较小,会优先存放于内存中,若超过一定的大小,则会转换为磁盘临时表|临时文件;
??磁盘临时表默认为 InnoDB 引擎,其存放在临时表空间中,由 innodb_temp_tablespaces_dir 定义表空间的存放目录,表空间文件类似:temp_[1-20].ibt ;MySQL 未定义 InnoDB 临时表空间的最大使用上限;
??当临时表|临时文件使用完毕后 , 会自动回收临时表空间文件的大?。?
??innodb_temp_data_file_path 定义了用户创建的临时表使用的回滚段的存储文件的相对路径、名字、大小和属性 , 该文件是全局临时表空间(ibtmp1),该文件可以设置文件最大使用大?。?
例外项(一般需要较大的空间):
??load data local 语句,客户端读取文件并将其内容发送到服务器,服务器将其存储在 tmpdir 参数指定的路径中;
??在 replica 中,回放 load data 语句时,需要将从 relay log 中解析出来的数据存储在 slave_load_tmpdir(replica_load_tmpdir) 指定的目录中,该参数默认和 tmpdir 参数指定的路径相同;
??需要 rebuild table 的在线 alter table 需要使用 innodb_tmpdir 存放排序磁盘排序文件,如果 innodb_tmpdir 未指定,则使用 tmpdir 的值;
若用户判断产生的临时表|临时文件一定会转换为磁盘临时表|临时文件,那么可以设置 set session big_tables=1;让产生的临时表|临时文件直接存放在磁盘上;
??对于需要较小空间的临时表|临时文件,MySQL 要么将其存储于内存,要么放在统一的磁盘临时表空间中 , 用完即释放;
??对于需要较大空间的临时表|临时文件,可以通过设置参数,将其存储于单独的目录|挂载点;例如:load local data 语句或需要重建表的在线 alter table 语句,都有对应的参数设置其存放临时表|临时文件的路径;
??当前只有 innodb_temp_data_file_path 参数可以限制 用户创建的临时表使用的回滚段的存储文件的大?。奁渌问梢韵拗屏偈北韡临时文件可使用的磁盘空间;
【MySQL】MySQL的tmpdir临时文件说明及使用设置MySQL临时目录用于存储临时文件或临时表 , 值可以是一个使用“:”(Unix)或“;”(Windows)分隔的路径列表,这些路径可被轮流使用 , 以便将负载分到不同磁盘 。
若MySQL server是作为Slave的角色,则不能将该目录指向基于内存文件系统的目录或者当主机重启时会被清理掉的目录 , 因为Slave需要这些文件复制临时表或执行LOAD DATA INFILE操作,这些文件丢失会导致复制失败 。这意味着不能将slave的tmpdir设置为linux系统默认的/tmp目录 。
对于Slave可以使用另一配置项slave_load_tmpdir来设置其临时目录 , 这样Slave可以不使用通用选项tmpdir设置的临时目录,对于非Slave角色的MySQL server没此限制 。
若临时目录不存在或权限不正确不仅会引起MySQL Server启动失败还会导致其他可能使用到临时目录的MySQL实用程序运行异常 。很多MySQL相关程序会从MySQL Server的配置文件读取选项值 。
MySQL 日志配置
MySQL的tmpdir临时文件说明及使用设置
一个MysQL/tmp目录爆满问题的处理
Shall I change the mysql tmpdir from /tmp to /var/lib/mysql/tmp ?
MySQL 临时目录
How to know if mysql tmpdir is being used?
MySQL, RAM disk for tmpdir
Changing the tmp folder of MySQL
MySQL中的临时表使用方法讲解当工作在非常大的表上时 你可能偶尔需要运行很多查询获得一个大量数据的小的子集 不是对整个表运行这些查询 而是让MySQL每次找出所需的少数记录 将记录选择到一个临时表可能更快些 然后多这些表运行查询 创建临时表很容易 给正常的CREATE TABLE语句加上TEMPORARY关键字 CREATE TEMPORARY TABLE tmp_table (name VARCHAR( ) NOT NULL value INTEGER NOT NULL)临时表将在你连接MySQL期间存在 当你断开时 MySQL将自动删除表并释放所用的空间 当然你可以在仍然连接的时候删除表并释放空间 DROP TABLE tmp_table如果在你创建名为tmp_table临时表时名为tmp_table的表在数据库中已经存在 临时表将有必要屏蔽(隐藏)非临时表tmp_table 如果你声明临时表是一个HEAP表 MySQL也允许你指定在内存中创建它 CREATE TEMPORARY TABLE tmp_table (name VARCHAR( ) NOT NULL value INTEGER NOT NULL) TYPE = HEAP因为HEAP表存储在内存中 你对它运行的查询可能比磁盘上的临时表快些 然而 HEAP表与一般的表有些不同 且有自身的限制 详见MySQL参考手册 正如前面的建议 你应该测试临时表看看它们是否真的比对大量数据库运行查询快 如果数据很好地索引 临时表可能一点不快 lishixinzhi/Article/program/MySQL/201311/29492