2023年12月18日发(作者:)

/***********************************作者:trieagle(让你望见影子的墙)日期:2009.5.5注:转载请保留此信息************************************/当使用sql语句进行查询时,查询的结果是存放在一个后缀名为tmp的一个临时文件中。当查询的时候,该文件存放查询的结果,当关闭该查询的时候,该临时文件会自动删除,所以在我们进行查询的时候,是感觉不到该文件的存在。一、tmp文件存在于什么地方对于windows系统,都有一个系统环境变量,这个变量可以通过右击我的电脑——属性——高级——环境变量可以查看。Tmp临时文件就存在于temp文件夹下面。二、tmp文件的格式对于tmp文件,里面存放的查询结果,那么对于查询结果在tmp文件中的存储是按照一定格式来进行存储的,存储的格式为:对于每一列,分成两部分:第一部分:标示该列的长度,当字符的长度大于255时,使用5个字节来存放。第二部分:该列的数据。对于字符型数据,是转化为uniocode来进行存储的。select1,cast(1asbigint),'ab',getdate()查询生成的tmp文件为(16进制)00086073c2027a7bcb08

其中为第一个1000000为第二个bigint类型的1为’ab’086073c2027a7bcb08为getdate()例如:对于下面一张表:使用select*fromtb形成的tmp文件格式为id列的数据长度id列的数据dtcol列的数据长度dtcol列的数据长度charcoal的数据maxcol列的数据长度maxcol的数据charcoal的数据其中charcol与maxcol都是转换为unicode来进行存储的。对于tmp文件的查看,可以通过记事本来查看,但是只能看到字符,对于数字、日期看到的是乱码,可以使用UE来查看tmp文件的二进制数据。三、向该表中插入100W数据declare@iint@dtdatetimeselect@i=0,@dt='1900-1-1'while@i<1000000begininsertintotestdata(dtcol,charcol,maxcol)values(@dt+@i,replicate(char(rand()*26+65),100),replicate(newid(),100))set@i=@i+1

end四、tmp文件对查询的影响在知道了tmp文件的格式之后,那么对于tmp文件的大小一般是能估算出来的,以上述表为例,一行在tmp文件中的大小为:1+8+1+8+1+200+5+7200=7424B,(第三列为2是因为第三列的长度为200,需要使用两个字节来表示,第四列长度为7200,需要使用5个字节表示)100W的数据大约是7424*100WB,tmp文件的大小为7,250,000KB左右。1、当表中的数据比较多的话,尤其是字符类型的数据占多数的时候,就需要注意这个tmp文件了。如果temp文件夹所在的磁盘空间不富裕的话,那么tmp会占用剩余的磁盘空间,还不够的话,那么系统会提示空间不够,并且会终止本次查询。2、temp文件夹所在的磁盘的磁盘格式最好为NTFS,因为FAT32格式最大的文件大小为4G,当tmp文件的大小超过4G时,那么是不会产生新的tmp文件的,那么系统也会提示空间不够,并且终止本次查询。(空间不够未必是磁盘空间不够,而是因为tmp文件已经达到最大容量4G)综上所述:temp文件夹应该放在磁盘空间充足的,并且分区格式为ntfs格式的分区上。本文来自CSDN博客,转载请/HEROWANG/archive/2009/05/05/标明出处: