當使用sql語句進行查詢時,查詢的結果是存放在一個後綴名為tmp的一個臨時文件中。當查詢的時候,該文件存放查詢的結果,當關閉該查詢的時候,該臨時文件會自動刪除,所以在我們進行查詢的時候,是感覺不到該文件的存在。
一、tmp文件存在於什麼地方
對於windows系統,都有一個系統環境變量,這個變量可以通過
右擊我的電腦——屬性——高級——環境變量可以查看。
Tmp臨時文件就存在於temp文件夾下面。
二、tmp文件的格式
對於tmp文件,裡面存放的查詢結果,那麼對於查詢結果在tmp文件中的存儲是按照
一定格式來進行存儲的,存儲的格式為:
對於每一列,分成兩部分:
第一部分:標示該列的長度,當字符的長度大於255時,使用5個字節來存放。
第二部分:該列的數據。對於字符型數據,是轉化為uniocode來進行存儲的。
select 1,cast(1 as bigint),'ab',getdate()例如:對於這樣一張表:
使用select * from tb 形成的tmp文件格式為:
id列的數據長度
id列的數據
dtcol列的數據長度
dtcol列的數據
charcol的數據長度
charcol的數據
maxcol列的數據長度
maxcol的數據
其中charcol與maxcol都是轉換為unicode來進行存儲的。
對於tmp文件的查看,可以通過記事本來查看,但是只能看到字符,對於數字、日期看到的是亂碼,可以使用UE來查看tmp文件的二進制數據。
三、向該表中插入100W數據
declare @i int @dt datetimeselect @i=0,@dt='
while @i<1000000
begin
insert into testdata(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,100W的數據大約是7424*100WB,tmp文件的大小為7,250,000KB左右。
1、當表中的數據比較多的話,尤其是字符類型的數據占多數的時候,就需要注意這個tmp文件了。如果temp文件夾所在的磁盤空間不富裕的話,那麼tmp會占用剩余的磁盤空間,還不夠的話,那麼系統會提示空間不夠,並且會終止本次查詢。
2、temp文件夾所在的磁盤的磁盤格式最好為NTFS,因為FAT32格式最大的文件大小為4G,當tmp文件的大小超過4G時,那麼是不會產生新的tmp文件的,那麼系統也會提示空間不夠,並且終止本次查詢。(空間不夠未必是磁盤空間不夠,而是因為tmp文件已經達到最大容量4G)
綜上所述:temp文件夾應該放在磁盤空間充足的,並且分區格式為ntfs格式的分區上。