创建临时表用CREATE TEMPORARY TABLE。临时表不用你删除,在结束数据库操作时临时表自动删除。

解决方案 »

  1.   

    我看到有的文章认为创建heap类型的表,是创建临时表的另一种方法。
    由于表建在内存中,速度很快。
    不知道各位对这种方法有什么意见?
      

  2.   

    呵呵,临时表只对建立它的那个连接可视,
    也就是说,
    如果一个连接建立了一个名为TEMP的临时表,
    其它的连接是不能看到这个名为TEMP的临时表的,
    其它的连接也同样可以再建立一个名为TEMP的临时表,
    各表互不影响,
    它一个连接关闭后,它所建的临时表将会自动删除而HEAP类型表正如你所述:HEAP表格使用一个(hashed)索引并且存储在内存中。这使得他们会更快,但是如果MySQL崩溃,你将失去所有存储的数据。HEAP作为临时表很可用!
     
    CREATE TABLE test TYPE=HEAP SELECT ip,SUM(downloads) as down
            FROM log_table GROUP BY ip;
    SELECT COUNT(ip),AVG(down) FROM test;
    DROP TABLE test;当你使用HEAP表时,这里是你应该考虑的一些事情: 你应该总是在CREATE语句中指定MAX_ROWS以保证你使用所有的内存。 
    索引将只能与与=和<=>一起使用(但是很快)。 
    HEAP表使用一个固定的记录长度格式。 
    HEAP不支持BLOB/TEXT列。 
    HEAP不支持AUTO_INCREMENT列。 
    HEAP不支持在一个NULL列上的索引。 
    你可以在一个HEAP表中有非唯一键(杂凑表一般不这样)。 
    HEAP表格在所有的客户之间被共享(就象任何其他的表)。 
    HEAP表的数据以小块分配。表是100%动态的(在插入时),无需溢出区和额外的键空间。删除的行放入一个链接表并且当你把新数据插入到表时,它将被再次使用。 
    为了释放内存,你应该执行DELETE FROM heap_table或DROP TABLE heap_table。 
    为了保证你不会偶然做些愚蠢的事情,你不能创建比max_heap_table_size大的HEAP表。
      

  3.   

    能创建heap类型的临时表?
    有由于heap类型的表,需要手工清除,如果程序有异常的话,会占用内存.
    可不可以把heap 和临时表结合起来呢?