当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后对这临时表运行查询。
创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:
CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) 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(10) NOT NULL,
value INTEGER NOT NULL
) TYPE = HEAP
因为HEAP表存储在内存中,你对它运行的查询可能比磁盘上的临时表快些。然而,HEAP表与一般的表有些不同,且有自身的限制。详见MySQL参考手册。
正如前面的建议,你应该测试临时表看看它们是否真的比对大量数据库运行查询快。如果数据很好地索引,临时表可能一点不快。
例子如下:
- <?php
- $link=mysql_connect('localhost','root','456789');
- if($link){
- mysql_select_db('cppc360',$link);
- mysql_query("set names 'gbk'");
- echo "数据库连接已经成功!";
- }
- $temp_sql = "create temporary table tmp_query (tmp_id int(11) NOT NULL auto_increment PRIMARY KEY,id int(11) default NULL,area varchar(20) default NULL)";
- $temp_query = mysql_query($temp_sql);
- $sql="insert into tmp_query(id,area) select id,area from php168_item_content_1 where content like '%电厂%' order by id desc";
- mysql_query($sql);
- $sql="select * from tmp_query";
- $query1=mysql_query($sql);
- echo mysql_num_rows($query1);
- while($rs=mysql_fetch_array($query1)){
- echo $rs[id]." ".$rs[area]."<br>";
- }
- ?>
- 来源:http://www.alixixi.com/Dev/Web/PHP/php6/2007/2007020811417.html
- http://database.51cto.com/art/201011/234786.htm