mysql临时表创建后存放在那里?怎样给某一个数据库创建临时表? mysql数据库怎么把查询出来的数据生成临时表
SQL\u600e\u4e48\u521b\u5efa\u4e00\u4e2a\u4e34\u65f6\u8868\u521b\u5efa\u4e34\u65f6\u8868
\u65b9\u6cd5\u4e00\uff1a
create table #\u4e34\u65f6\u8868\u540d(\u5b57\u6bb51 \u7ea6\u675f\u6761\u4ef6,
\u5b57\u6bb52 \u7ea6\u675f\u6761\u4ef6,
.....)
create table ##\u4e34\u65f6\u8868\u540d(\u5b57\u6bb51 \u7ea6\u675f\u6761\u4ef6,
\u5b57\u6bb52 \u7ea6\u675f\u6761\u4ef6,
.....)
\u65b9\u6cd5\u4e8c\uff1a
select * into #\u4e34\u65f6\u8868\u540d from \u4f60\u7684\u8868;
select * into ##\u4e34\u65f6\u8868\u540d from \u4f60\u7684\u8868;
\u6ce8\uff1a\u4ee5\u4e0a\u7684#\u4ee3\u8868\u5c40\u90e8\u4e34\u65f6\u8868\uff0c##\u4ee3\u8868\u5168\u5c40\u4e34\u65f6\u8868
\u67e5\u8be2\u4e34\u65f6\u8868
select * from #\u4e34\u65f6\u8868\u540d;
select * from ##\u4e34\u65f6\u8868\u540d;
\u5220\u9664\u4e34\u65f6\u8868
drop table #\u4e34\u65f6\u8868\u540d;
drop table ##\u4e34\u65f6\u8868\u540d;
MySQL \u9700\u8981\u521b\u5efa\u9690\u5f0f\u4e34\u65f6\u8868\u6765\u89e3\u51b3\u67d0\u4e9b\u7c7b\u578b\u7684\u67e5\u8be2\u3002\u5f80\u5f80\u67e5\u8be2\u7684\u6392\u5e8f\u9636\u6bb5\u9700\u8981\u4f9d\u8d56\u4e34\u65f6\u8868\u3002\u4f8b\u5982\uff0c\u5f53\u60a8\u4f7f\u7528 GROUP BY\uff0cORDER BY \u6216DISTINCT \u65f6\u3002\u8fd9\u6837\u7684\u67e5\u8be2\u5206\u4e24\u4e2a\u9636\u6bb5\u6267\u884c\uff1a\u9996\u5148\u662f\u6536\u96c6\u6570\u636e\u5e76\u5c06\u5b83\u4eec\u653e\u5165\u4e34\u65f6\u8868\u4e2d\uff0c\u7136\u540e\u662f\u5728\u4e34\u65f6\u8868\u4e0a\u6267\u884c\u6392\u5e8f\u3002
\u5bf9\u4e8e\u67d0\u4e9b UNION \u8bed\u53e5\uff0c\u4e0d\u80fd\u5408\u5e76\u7684 VIEW\uff0c\u5b50\u67e5\u8be2\u65f6\u7528\u5230\u6d3e\u751f\u8868\uff0c\u591a\u8868 UPDATE \u4ee5\u53ca\u5176\u4ed6\u4e00\u4e9b\u60c5\u51b5\uff0c\u8fd8\u9700\u8981\u4f7f\u7528\u4e34\u65f6\u8868\u3002\u5982\u679c\u4e34\u65f6\u8868\u5f88\u5c0f\uff0c\u53ef\u4ee5\u5230\u5185\u5b58\u4e2d\u521b\u5efa\uff0c\u5426\u5219\u5b83\u5c06\u5728\u78c1\u76d8\u4e0a\u521b\u5efa\u3002MySQL \u5728\u5185\u5b58\u4e2d\u521b\u5efa\u4e86\u4e00\u4e2a\u8868\uff0c\u5982\u679c\u5b83\u53d8\u5f97\u592a\u5927\uff0c\u5c31\u4f1a\u88ab\u8f6c\u6362\u4e3a\u78c1\u76d8\u4e0a\u5b58\u50a8\u3002\u5185\u5b58\u4e34\u65f6\u8868\u7684\u6700\u5927\u503c\u7531 tmp_table_size \u6216 max_heap_table_size \u503c\u5b9a\u4e49\uff0c\u4ee5\u8f83\u5c0f\u8005\u4e3a\u51c6\u3002MySQL 5.7 \u4e2d\u7684\u9ed8\u8ba4\u5927\u5c0f\u4e3a 16MB\u3002\u5982\u679c\u8fd0\u884c\u67e5\u8be2\u7684\u6570\u636e\u91cf\u8f83\u5927\uff0c\u6216\u8005\u5c1a\u672a\u67e5\u8be2\u4f18\u5316\uff0c\u5219\u53ef\u4ee5\u589e\u52a0\u8be5\u503c\u3002\u8bbe\u7f6e\u9608\u503c\u65f6\uff0c\u8bf7\u8003\u8651\u53ef\u7528\u7684 RAM \u5927\u5c0f\u4ee5\u53ca\u5cf0\u503c\u671f\u95f4\u7684\u5e76\u53d1\u8fde\u63a5\u6570\u3002\u4f60\u65e0\u6cd5\u65e0\u9650\u671f\u5730\u589e\u52a0\u53d8\u91cf\uff0c\u56e0\u4e3a\u5728\u67d0\u4e9b\u65f6\u5019\u4f60\u9700\u8981\u8ba9 MySQL \u4f7f\u7528\u78c1\u76d8\u4e0a\u7684\u4e34\u65f6\u8868\u3002
\u6ce8\u610f\uff1a\u5982\u679c\u6d89\u53ca\u7684\u8868\u5177\u6709 TEXT \u6216 BLOB \u5217\uff0c\u5219\u5373\u4f7f\u5927\u5c0f\u5c0f\u4e8e\u914d\u7f6e\u7684\u9608\u503c\uff0c\u4e5f\u4f1a\u5728\u78c1\u76d8\u4e0a\u521b\u5efa\u4e34\u65f6\u8868\u3002
对于某些 UNION 语句,不能合并的 VIEW,子查询时用到派生表,多表 UPDATE 以及其他一些情况,还需要使用临时表。如果临时表很小,可以到内存中创建,否则它将在磁盘上创建。MySQL 在内存中创建了一个表,如果它变得太大,就会被转换为磁盘上存储。内存临时表的最大值由 tmp_table_size 或 max_heap_table_size 值定义,以较小者为准。MySQL 5.7 中的默认大小为 16MB。如果运行查询的数据量较大,或者尚未查询优化,则可以增加该值。设置阈值时,请考虑可用的 RAM 大小以及峰值期间的并发连接数。你无法无限期地增加变量,因为在某些时候你需要让 MySQL 使用磁盘上的临时表。
注意:如果涉及的表具有 TEXT 或 BLOB 列,则即使大小小于配置的阈值,也会在磁盘上创建临时表。
临时表和内存表不一样。很容易混淆
临时表的表结构和数据都存放在内存里。用的时候直接用
内存表的表结构存放在磁盘上,只有数据存放在内存里。
创建临时表,其实就是加了个temporary
create temporary table 临时表名(字段1 约束条件,
字段2 约束条件,
nbsp; .....)
临时表的数据和结构都是存放在内存中
创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:
CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
)
使用连接(JOIN)来代替子查询(Sub-Queries)
选取最适用的字段属性
使用联合(UNION)来代替手动创建的临时表
使用事务使用外键使用索引优化的查询语句
尽量避免使用就会很优化了
insert into tmp_table21 select name from cadre
这样行吗
请参考
绛旓細濡傛灉涓存椂琛ㄥ緢灏忥紝鍙互鍒板唴瀛樹腑鍒涘缓锛屽惁鍒欏畠灏嗗湪纾佺洏涓婂垱寤恒侻ySQL 鍦ㄥ唴瀛樹腑鍒涘缓浜嗕竴涓〃锛屽鏋滃畠鍙樺緱澶ぇ锛屽氨浼氳杞崲涓虹鐩樹笂瀛樺偍銆傚唴瀛樹复鏃惰〃鐨勬渶澶у肩敱 tmp_table_size 鎴 max_heap_table_size 鍊煎畾涔夛紝浠ヨ緝灏忚呬负鍑嗐侻ySQL 5.7 涓殑榛樿澶у皬涓 16MB銆傚鏋滆繍琛屾煡璇㈢殑鏁版嵁閲忚緝澶э紝鎴栬呭皻鏈煡璇...
绛旓細3銆佷复鏃惰〃鍦ㄥ綋鍓嶈繛鎺ョ粨鏉熶箣鍚庯紝浼氳嚜鍔ㄥ垹闄ゃ涓存椂琛ㄥ彲浠ュ瓨鍌ㄥ湪鍐呭瓨鍜岀鐩銆
绛旓細鍒涘缓涓存椂琛寰堝鏄擄紝缁欐甯哥殑CREATE TABLE璇彞鍔犱笂TEMPORARY鍏抽敭瀛楋細CREATE TEMPORARY TABLE tmp_table (name VARCHAR(10) NOT NULL,value INTEGER NOT NULL)涓存椂琛ㄥ皢鍦ㄤ綘杩炴帴MySQL鏈熼棿瀛樺湪銆傚綋浣犳柇寮鏃讹紝MySQL灏嗚嚜鍔ㄥ垹闄よ〃骞堕噴鏀炬墍鐢ㄧ殑绌洪棿銆傚綋鐒朵綘鍙互鍦ㄤ粛鐒惰繛鎺ョ殑鏃跺欏垹闄よ〃骞堕噴鏀剧┖闂淬侱ROP TABLE tmp_t...
绛旓細涓存椂琛ㄥ彧鍦ㄥ綋鍓嶈繛鎺ュ彲瑙锛屽綋鍏抽棴杩炴帴鏃讹紝Mysql浼氳嚜鍔ㄥ垹闄よ〃骞堕噴鏀炬墍鏈夌┖闂淬傚鏋滀綘浣跨敤PHP鑴氭湰鏉ュ垱寤篗ySQL涓存椂琛紝閭f瘡褰揚HP鑴氭湰鎵ц瀹屾垚鍚庯紝璇ヤ复鏃惰〃涔熶細鑷姩閿姣併傚垹闄ySQL 涓存椂琛 榛樿鎯呭喌涓嬶紝褰撲綘鏂紑涓庢暟鎹簱鐨勮繛鎺ュ悗锛屼复鏃惰〃灏变細鑷姩琚攢姣併傚綋鐒朵綘涔熷彲浠ュ湪褰撳墠MySQL浼氳瘽浣跨敤 DROP TABLE 鍛戒护鏉ユ墜鍔ㄥ垹...
绛旓細鍐呭瓨琛紝灏辨槸鏀惧湪鍐呭瓨涓殑琛锛屾墍浣跨敤鍐呭瓨鐨勫ぇ灏忓彲閫氳繃My.cnf涓殑max_heap_table_size鎸囧畾锛屽max_heap_table_size=1024M銆備复鏃惰〃涔熸槸瀛樻斁鍦ㄥ唴瀛樹腑锛屼复鏃惰〃鏈澶ф墍闇鍐呭瓨闇瑕侀氳繃tmp_table_size=1024M璁惧畾銆傚綋鏁版嵁瓒呰繃涓存椂琛ㄧ殑鏈澶у艰瀹氭椂锛岃嚜鍔ㄨ浆涓虹鐩樿〃锛屾鏃跺洜闇瑕佽繘琛孖O鎿嶄綔锛屾ц兘浼氬ぇ澶т笅闄嶏紝鑰...
绛旓細杩欑涓存椂琛鍦⊿QL璇彞鎵ц涔嬮棿浜х敓锛屾墽琛屽畬姣曞悗澶辨晥銆 鍦MySQL閲岄潰杩欑涓存椂琛ㄤ笉鏄緢鍥哄畾锛岃窡闅廙ySQL榛樿瀛樺偍寮曟搸鏉ュ彉鍖栥傛瘮濡傞粯璁ゅ瓨鍌ㄥ紩鎿庢槸MyISAM,涓存椂琛ㄧ殑寮曟搸灏辨槸MyISAM,骞朵笖鏂囦欢鐢熸垚褰㈠紡浠ュ強鏁版嵁杩愪綔褰㈠紡鍜孧yISAM涓鏍凤紝鍙槸鏁版嵁淇濆瓨鍦鍐呭瓨閲岋紱濡傛灉榛樿寮曟搸鏄疘NNODB锛岄偅涔堜复鏃惰〃鐨勫紩鎿庡氨鏄疘NNODB锛屾鏃跺畠鐨...
绛旓細褰撲細璇濊鏉鎺夊悗锛屽彲浠ュ洖鏀剁鐩樼┖闂达紱鑰屽師鏉ョ殑 ibtmp1 鏄幇鍦ㄧ殑鍏ㄥ眬涓存椂琛绌洪棿锛屽瓨鏀剧殑鏄鐢ㄦ埛鍒涘缓鐨勪复鏃惰〃杩涜鏇存敼鐨勫洖婊氭锛屽湪 5.7 涓 ibtmp1 瀛樻斁鐨勬槸鐢ㄦ埛鍒涘缓鐨勪复鏃惰〃鍜岀鐩樺唴閮ㄤ复鏃惰〃锛涗篃灏辨槸鍦 8.0 鍜 5.7 涓 ibtmp1 鐨勭敤閫斿彂鐢熶簡鍙樺寲锛5.7 鐗堟湰涓存椂琛ㄧ殑鏁版嵁瀛樻斁鍦 ibtmp1 涓紝鍦...
绛旓細1. MySQL 浼氬熀鏈伒瀹 max_heap_table_size 鐨勮瀹氾紝鍦ㄥ唴瀛樹笉澶熺敤鏃讹紝鐩存帴灏嗚〃杞埌纾佺洏涓瀛樺偍銆2. 鐢变簬寮曟搸涓嶅悓锛堝唴瀛樹腑琛ㄥ紩鎿庝负 heap锛岀鐩樹腑琛ㄥ紩鎿庡垯璺熼殢 internal_tmp_disk_storage_engine 鐨勯厤缃級锛屾湰娆″疄楠屽啓纾佺洏鐨勬暟鎹噺鍜 瀹為獙 05 涓娇鐢ㄥ唴瀛樼殑鏁版嵁閲忎笉鍚屻3. 濡傛灉涓存椂琛瑕佷娇鐢ㄧ鐩橈紝琛...
绛旓細1)瀹氫箟瀛楁 CREATE TEMPORARY TABLE tmp_table (name VARCHAR(10) NOT NULL,value INTEGER NOT NULL )2)鐩存帴灏嗘煡璇㈢粨鏋滃鍏ヤ复鏃惰〃 CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name 2銆佸彟澶mysql涔熷厑璁镐綘鍦ㄥ唴瀛樹腑鐩存帴鍒涘缓涓存椂琛锛屽洜涓烘槸鍦ㄥ唴瀛樹腑鎵鏈夐熷害浼氬緢蹇紝璇硶濡備笅锛欳REATE TEMPORARY ...
绛旓細1. MySQL 浼氬熀鏈伒瀹 max_heap_table_size 鐨勮瀹氾紝鍦ㄥ唴瀛樹笉澶熺敤鏃讹紝鐩存帴灏嗚〃杞埌纾佺洏涓瀛樺偍銆2. 鐢变簬寮曟搸涓嶅悓锛堝唴瀛樹腑琛ㄥ紩鎿庝负 heap锛岀鐩樹腑琛ㄥ紩鎿庡垯璺熼殢 internal_tmp_disk_storage_engine 鐨勯厤缃級锛屾湰娆″疄楠屽啓纾佺洏鐨勬暟鎹噺鍜 瀹為獙 05 涓娇鐢ㄥ唴瀛樼殑鏁版嵁閲忎笉鍚屻3. 濡傛灉涓存椂琛瑕佷娇鐢ㄧ鐩橈紝琛...