• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 數據庫主鍵int型和str型效率比較

    發表于:2007-05-25來源:作者:點擊數: 標簽:數據庫效率型和str主鍵
    又看到這樣的一段話: 主鍵用整型會極大的提高查詢效率,而字符型的比較開銷要比整型的比較開銷大很多,用字符型數據作主鍵會使數據插入、更新與查詢的效率降低。數據量小的時候這點降低可能不會被注意,可是當數據量大的時候,小的改進也能夠提高系統的響應

    又看到這樣的一段話:

    clearcase/" target="_blank" >cc00>主鍵用整型會極大的提高查詢效率,而字符型的比較開銷要比整型的比較開銷大很多,用字符型數據作主鍵會使數據插入、更新與查詢的效率降低。數據量小的時候這點降低可能不會被注意,可是當數據量大的時候,小的改進也能夠提高系統的響應速度。

    我做了一個實驗,用MSSQL企業管理器建立兩張表TInt和TStr,
    TInt
    {
     intId  int  PRIMARY KEY
     intValue  int
    }
    TStr
    {
     strId  varchar(20)  PRIMARY KEY
     strValue  varchar(20)
    }
    往這兩張表數據分別為intId = intValue = 1 ~ 300000,strId = strValue = '1' ~ '300000'。然后用mfc封裝的odbc分別執行
    intRslt.Open(CRecordset::dynaset,"SELECT * FROM TInt WHERE intId = 123456",CRecordset::readOnly);

    strRslt.Open(CRecordset::dynaset,"SELECT * FROM TSTR WHERE strId = '123456'",CRecordset::readOnly);
    一千次。
    時間分別是1392毫秒和1452毫秒

    同樣執行
    intRslt.Open(CRecordset::dynaset,"SELECT * FROM TInt WHERE intValue = 123456",CRecordset::readOnly);

    strRslt.Open(CRecordset::dynaset,"SELECT * FROM TSTR WHERE strValue = '123456'",CRecordset::readOnly);
    一千次。
    時間分別是58955毫秒和172227毫秒

    如果用MS SqlServer新建一個主鍵(Primary Key),SqlServer默認為它建立一個聚集(CLUSTERED)索引,用聚集索引來定位一個數據需要的比較次數應該是很少的。而插入或者更新操作可能導致整行移動大量數據,但這對于int型和str型主鍵是一樣的。

    為什么作者會如是說呢?現在我并不認為把str型主鍵改成int型是提高數據庫效率的關鍵,相比使用數據庫連接池或者優化sql語句,這點效率微不足道。


    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>