程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> SQL查詢時生成的臨時文件對數據庫查詢的影響

SQL查詢時生成的臨時文件對數據庫查詢的影響

編輯:關於MYSQL數據庫

       當使用sql語句進行查詢時,查詢的結果是存放在一個後綴名為tmp的一個臨時文件中。當查詢的時候,該文件存放查詢的結果,當關閉該查詢的時候,該臨時文件會自動刪除,所以在我們進行查詢的時候,是感覺不到該文件的存在。

      一、tmp文件存在於什麼地方

      對於windows系統,都有一個系統環境變量,這個變量可以通過

      右擊我的電腦——屬性——高級——環境變量可以查看。

      Tmp臨時文件就存在於temp文件夾下面。

      二、tmp文件的格式

      對於tmp文件,裡面存放的查詢結果,那麼對於查詢結果在tmp文件中的存儲是按照

      一定格式來進行存儲的,存儲的格式為:

      對於每一列,分成兩部分:

      第一部分:標示該列的長度,當字符的長度大於255時,使用5個字節來存放。

      第二部分:該列的數據。對於字符型數據,是轉化為uniocode來進行存儲的。

    select 1,cast(1 as bigint),'ab',getdate() 
    查詢生成的tmp文件為(16進制) 
    04 01 00 00 00 08 01 00 00 00 00 00 00 00 04 61 00 62 00 08 60 73 c2 02 7a 7b cb 08
    其中04 01 00 00 00為第一個1 
    08 01 00 00 00 00 00 00 00為第二個bigint類型的1 
    04 61 00 62 00 為’ab’ 
    08 60 73 c2 02 7a 7b cb 08 為getdate()

      例如:對於這樣一張表:

      使用select * from tb 形成的tmp文件格式為:

    id列的數據長度

    id列的數據

    dtcol列的數據長度

    dtcol列的數據

    charcol的數據長度

    charcol的數據

    maxcol列的數據長度

    maxcol的數據

      其中charcol與maxcol都是轉換為unicode來進行存儲的。

      對於tmp文件的查看,可以通過記事本來查看,但是只能看到字符,對於數字、日期看到的是亂碼,可以使用UE來查看tmp文件的二進制數據。

      三、向該表中插入100W數據

    declare @i int @dt datetime

    select @i=0,@dt='1900-1-1'

    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格式的分區上。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved