demoshop

demo, trying to be the best_

前言:這幾天和朋友又再次討論到 SQLCE 和 SQLite 效能的問題,有常在看 demo 的文章可以知道我是一直很推崇 SQLCE 的,但我朋友卻是一直在使用 SQLite ,我「認為」SQLCE即使效能較差,他和MSSQL的相容能力還是有絕對優勢的,而我朋友「認為」SQLite 當初出現就是標榜快速,所以效能上一定會贏,雙方爭到最後只剩下效能有不同的意見,但是兩者都是用感覺在說話,為了讓說話可以大聲點,所以有了這篇測試文。


●為求最接近的公平所以測試都是使用 Order 這張表來做測試,先看看他們是否長得一樣

SQLCE

SQLite


demo廢言雖然依據上面的圖就可以看出基本的搜尋效能,但這樣太草率所以 demo 還作了幾種不同的測試,詳細請繼續看下去。


●首先使用 ORM 的技術針對 Order 來做連續一千次的 toList() 借此判斷搜尋要多久

 

demo廢言SQLite 查詢兩次的結果都落在 29秒再來看看 SQLCE 的表現

 

 

 

demo廢言SQLCE 搜尋兩次的時間都落在 6 秒....這這這有點OO比XX的感覺,但是這時候又有人說了,你今天在ToList 的時候不能確保 Provider 的優化能力,可能用每套都有天地差別的效果,於是我們來直接使用 SQL 語法操作


●暖個身搜尋 Order 資料表並且顯示

但是測試一次是不準的,在查詢的當下還要考量機器的忙碌度,因此 demo 手動各執行了十次(手動間隔秒數不同)以下是搜尋秒數的記錄。

  1. SQLite
    1. 00:00:043
    2. 00:00:043
    3. 00:00:036
    4. 00:00:028
    5. 00:00:044
    6. 00:00:037
    7. 00:00:028
    8. 00:00:035
    9. 00:00:025
    10. 00:00:036
       
  2. SQLCE
    1. 00:00:013
    2. 00:00:018
    3. 00:00:013
    4. 00:00:017
    5. 00:00:028
    6. 00:00:021
    7. 00:00:022
    8. 00:00:023
    9. 00:00:034
    10. 00:00:036

 


●再來是 SQLCE 和 SQLite 輪流寫入,各兩次並且是 SQLite → SQLCE → SQLite → SQLCE 的順序


SQLite 連續寫入一千次耗時15秒 (第一次測試)

 

 


SQCE 連續寫入一千次耗時10秒(第一次測試)

 

 


SQLite 連續寫入一千次耗時15秒(第二次測試)

 

 


SQCE 連續寫入一千次耗時8秒(第一次測試)


demo廢言測試就到這裡結束,對於刪除和更新我並沒有去測,因為以上的結果已經大致可以判斷了,不過 demo 不會在這裡下結論,畢竟還是有存在些變數可能會有人質疑我用的工具用的 Provider 對於 MSSQL 家族較親和,所以在文章的最後放上這次測試的完整檔案供有興趣的朋友也可以自己用自己的環境執行測試。

點我下載

內容包含8個檔案

  1. NorthwindSQLCE.sdf
  2. NorthwindSQLite.sl3
  3. SQCEInsert.linq
  4. SQLCE.linq
  5. SQLCEADO.linq
  6. SQLite.linq
  7. SQLiteADO.linq
  8. SQLiteInsert.linq

 

回應討論