十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
当工作在非常大的表上时 你可能偶尔需要运行很多查询获得一个大量数据的小的子集 不是对整个表运行这些查询 而是让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
创新互联建站从2013年成立,是专业互联网技术服务公司,拥有项目成都网站设计、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元沁水做网站,已为上家服务,为沁水各地企业和个人服务,联系电话:18980820575
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 需要创建隐式临时表来解决某些类型的查询。往往查询的排序阶段需要依赖临时表。例如,当您使用 GROUP BY,ORDER BY 或DISTINCT 时。这样的查询分两个阶段执行:首先是收集数据并将它们放入临时表中,然后是在临时表上执行排序。
对于某些 UNION 语句,不能合并的 VIEW,子查询时用到派生表,多表 UPDATE 以及其他一些情况,还需要使用临时表。如果临时表很小,可以到内存中创建,否则它将在磁盘上创建。MySQL 在内存中创建了一个表,如果它变得太大,就会被转换为磁盘上存储。内存临时表的最大值由 tmp_table_size 或 max_heap_table_size 值定义,以较小者为准。MySQL 5.7 中的默认大小为 16MB。如果运行查询的数据量较大,或者尚未查询优化,则可以增加该值。设置阈值时,请考虑可用的 RAM 大小以及峰值期间的并发连接数。你无法无限期地增加变量,因为在某些时候你需要让 MySQL 使用磁盘上的临时表。
注意:如果涉及的表具有 TEXT 或 BLOB 列,则即使大小小于配置的阈值,也会在磁盘上创建临时表。