免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2951 | 回复: 1
打印 上一主题 下一主题

MYSQL--临时表,表变量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-21 16:27 |只看该作者 |倒序浏览
MYSQL--临时表,表变量在mysql中没有表变量这一概念!

mysql有临时表:create temporary table if not exists {表定义}  --关键字”temporary“指示mysql创建会话级别的临时表。

临时表只对当前会话可见,连接断开时,自动删除!
你不必担心所创建的临时表的名称会和其他会话建立的临时表、或非临时表冲突!注意如果你的临时表和正常表名称相同,正常表会被隐藏——如同全局变量和局部变量那样
创建临时表不会引发通常的commit事务提交
使用临时表的诸多限制

引擎类型只能是:memory(heap)、myisam、merge、innodb
不支持mysql cluster
同一个查询语句中只能引用一次! 如 SELECT * FROM TP_TABLE , TP_TABLE AS ALIAS_NAME;  是错误的

同一个用户存储函数中只能引用一次!
show tables 不会显示临时表
不能使用rename重命名临时表。只能使用ALTER TABLE OLD_TP_TABLE_NAME RENAME NEW_TP_TABLE_NAME;
影响使用replication功能

mysql服务器自动使用的内部临时表

在某些情况下,mysql服务器会自动创建内部临时表:该临时表可以是只存在于内存的memory临时表,或者是存储于硬盘的myisam临时表;而且 初始创建的memory临时表由于表的增大 可能会转变为myisam临时表——其转化临界点由max_heap_table_size 和tmp_table_size系统变量的 较小值 决定的!注意:max_heap_table_size系统变量应用于所有的memory引擎的表,不管是用户临时表、正常表、或者内部临时表。
内部临时表的创建条件:
group by 和 order by中的列不相同
order by的列不是引用from 表列表中 的第一表
group by的列不是引用from 表列表中 的第一表
使用了sql_small_result选项
含有distinct 的 order by语句
初始创建内部myisam临时表的条件:
表中存在text、blob列
在group by中的 列 有超过512字节
在distinct查询中的 列 有超过512字节
在union、union all联合查询中,select 列 列表中的 列 有超过512字节的
如何判断某个查询是否会产生内部临时表:使用explain查看执行计划,检查extra列看是否使用临时表“using temporary”

论坛徽章:
0
2 [报告]
发表于 2011-03-22 09:25 |只看该作者
支持翻译+分享,不过请注明原文出处:http://www.pythian.com/news/1624 ... e_size-are-bounded/
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP