none
請問PLINQ 執行的搜索效率 會比T-SQL的速度還要快嗎? RRS feed

  • 問題

  • 最近小弟學了SQL後 又得知了平行處理這個概念  這個東西應用到LINQ搜索資料上 也就是PLINQ 似乎可以使搜索速度變快

    但到底快到什麼樣的地步  有人做過測試嗎?  它會比直接在SQL中寫的T-SQL語法還快嗎?  

    2012年8月11日 下午 01:19

解答

  • PLINQ 可以讓你的多核/多緒處理器以平行處理的方式來處理原先循序進行的工作, 這是它之所以可以加快處理速度的原理。但是如果你要問使用 PLINQ 會不會比 T-SQL 快, 那麼這種問題或許有點形同雞同鴨講。因為你得先把問題切割, 才有辦法分析。

    首先, 你必須考慮你的 SQL Server 是否安裝在本機, 或者在其它機器。如果不是裝在本機, 那麼 I/O 是否會變成瓶頸, 就會變成另一個較關鍵的問題。

    其次, 你必須考慮你的 query 是否複雜。

    基本上, 如果 query 並不複雜、資料量又不大, 那麼使用 PLINQ 的話, 等於一次可以執行好幾個 query, 它能不快嗎? 但如果情境倒過來, 你的一個 query 就足以把資料庫的運算資源搾乾, 或者把 I/O 佔滿, 那麼用不用 PLINQ 都一樣了。


    • 已標示為解答 向恩 2012年8月12日 上午 08:09
    2012年8月12日 上午 03:50
  • 會不會用平行運算做查詢處理是 DBMS 實作上的問題,但至少 SQL Server 2005 以上是有的,其他 DBMS 我想也一定會有。

    PLINQ 是植基於 Parallel Task Library 上的 LINQ 實作,但就算有多 CPU 可用,I/O 慢的話一樣慢 (例如用 PLINQ 存取檔案或檔案型資料庫)。


    學習不是查個 Google 套個書上的範例就算了,而是去熟悉了解每個程式碼背後的意義,否則就算學個幾百年,它也不會是你的。
    =================================
    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    • 已標示為解答 向恩 2012年8月12日 上午 08:09
    2012年8月12日 上午 04:15
    版主
  • 1) ADO.NET與LINQ在效能比較上各擅勝場, 在新增, 刪除, 修改與查詢上各有輸贏, 請參考:Performance Comparisons LINQ to SQL / ADO / C#

    2) PLINQ會不會LINQ比快, 這個要By Case看, 因為處理平行運算是會付出代價的, 當付出代價無法COVER得到的效能提升的話, PLINQ有可能得到很有限的效能提升, 甚至反而比LINQ慢

    • 已提議為解答 TerryChuang 2012年8月12日 上午 06:37
    • 已標示為解答 向恩 2012年8月12日 上午 08:09
    2012年8月12日 上午 06:06
  • SQL Compact 是簡易型的資料庫, 跟你使不使用 PLINQ 應該沒有關係。SQL Server 當然也可以裝在本機, 一點也不影響。

    我前面問你是不是裝在本機, 只是要確定你的問題是否屬於 IO-Bound 而已。


    • 已標示為解答 向恩 2012年9月17日 上午 12:17
    2012年9月16日 下午 03:50

所有回覆

  • 未必吧,資料庫也是有平行運算的
    2012年8月11日 下午 05:11
  • PLINQ 可以讓你的多核/多緒處理器以平行處理的方式來處理原先循序進行的工作, 這是它之所以可以加快處理速度的原理。但是如果你要問使用 PLINQ 會不會比 T-SQL 快, 那麼這種問題或許有點形同雞同鴨講。因為你得先把問題切割, 才有辦法分析。

    首先, 你必須考慮你的 SQL Server 是否安裝在本機, 或者在其它機器。如果不是裝在本機, 那麼 I/O 是否會變成瓶頸, 就會變成另一個較關鍵的問題。

    其次, 你必須考慮你的 query 是否複雜。

    基本上, 如果 query 並不複雜、資料量又不大, 那麼使用 PLINQ 的話, 等於一次可以執行好幾個 query, 它能不快嗎? 但如果情境倒過來, 你的一個 query 就足以把資料庫的運算資源搾乾, 或者把 I/O 佔滿, 那麼用不用 PLINQ 都一樣了。


    • 已標示為解答 向恩 2012年8月12日 上午 08:09
    2012年8月12日 上午 03:50
  • 會不會用平行運算做查詢處理是 DBMS 實作上的問題,但至少 SQL Server 2005 以上是有的,其他 DBMS 我想也一定會有。

    PLINQ 是植基於 Parallel Task Library 上的 LINQ 實作,但就算有多 CPU 可用,I/O 慢的話一樣慢 (例如用 PLINQ 存取檔案或檔案型資料庫)。


    學習不是查個 Google 套個書上的範例就算了,而是去熟悉了解每個程式碼背後的意義,否則就算學個幾百年,它也不會是你的。
    =================================
    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    • 已標示為解答 向恩 2012年8月12日 上午 08:09
    2012年8月12日 上午 04:15
    版主
  • 1) ADO.NET與LINQ在效能比較上各擅勝場, 在新增, 刪除, 修改與查詢上各有輸贏, 請參考:Performance Comparisons LINQ to SQL / ADO / C#

    2) PLINQ會不會LINQ比快, 這個要By Case看, 因為處理平行運算是會付出代價的, 當付出代價無法COVER得到的效能提升的話, PLINQ有可能得到很有限的效能提升, 甚至反而比LINQ慢

    • 已提議為解答 TerryChuang 2012年8月12日 上午 06:37
    • 已標示為解答 向恩 2012年8月12日 上午 08:09
    2012年8月12日 上午 06:06
  • PLINQ 可以讓你的多核/多緒處理器以平行處理的方式來處理原先循序進行的工作, 這是它之所以可以加快處理速度的原理。但是如果你要問使用 PLINQ 會不會比 T-SQL 快, 那麼這種問題或許有點形同雞同鴨講。因為你得先把問題切割, 才有辦法分析。

    首先, 你必須考慮你的 SQL Server 是否安裝在本機, 或者在其它機器。如果不是裝在本機, 那麼 I/O 是否會變成瓶頸, 就會變成另一個較關鍵的問題。

    其次, 你必須考慮你的 query 是否複雜。

    基本上, 如果 query 並不複雜、資料量又不大, 那麼使用 PLINQ 的話, 等於一次可以執行好幾個 query, 它能不快嗎? 但如果情境倒過來, 你的一個 query 就足以把資料庫的運算資源搾乾, 或者把 I/O 佔滿, 那麼用不用 PLINQ 都一樣了。


    針對Jonny大大提出的詳解 我還有點問題  依照你所講的  資料庫安裝在本機的話  照理說搜索效能 就是直接參考

    我這台設計應用程序的電腦效能  我的狀況是  我的應用程序跟SQL的確是裝在同一台電腦上  我是用VB.net開發的

    我加入這個資料庫項目 卻不是選擇本機資料庫  而是ADO.NET實體資料庫模型  因為我目前只學entity 的技巧 

    我不確定我用這個技術是否可等同於本機資料庫的搜索效能   根據我的狀況我是否使用PLINQ來對實體資料庫做搜索能得到較好的效能呢?   還有個問題就是我們平時寫的SQL語法 它在搜索上就已經是根據多核心來做查詢了嗎?  不然用plinq to entity 時 它是如何翻譯成SQL語法做搜尋的?

    PS:我會想使用Plinq還有一個考慮點 就是因為我在對資料庫的查詢搜索上會滿頻繁的 所以同時間我想要使用多核心去對機子能負荷的查詢數做搜索匹配   我目前這台機子是雙核心的  在查詢上最多就使用兩筆搜索  只要一筆結束 就立即再添入新的搜索資料 繼續搜索 這種狀況應該使用plinq還滿適合的吧!





    • 已編輯 向恩 2012年9月16日 上午 12:32
    2012年9月16日 上午 12:04
  • 如果你把 SQL Server 架設在本機, 那麼它在 I/O 傳輸的速度上絕對比架設在其它機器來得快, 但是犧牲了運算上的效能 (SQL Server 和客戶端程式都在搶 CPU 和記憶體)。我們在衡量效能瓶頸時, 通常都會先考量兩個面向, 一個叫做 CPU-Bound, 另一個叫做 IO-Bound。從這兩個最大的面向開始分析, 然後再往細節去分析。

    SQL 是否有平行運算? 有! 你不妨參考德瑞克這一篇:「認識平行(parallelism)處理,以MAXDOP、cost threshold for parallelism與max degree of parallelism選項為例」。如果你有更進一步的問題, 可以在 SQL 區發問。

    不過, 一般而言, 你可以在客戶端程式 (ASP.NET 或者 Windows Form 等) 下 PLINQ, 或者在資料庫裡面下平行運算指示詞, 但是如果你想兩者都做, 那麼不是辦不到, 就是效能沒有想像的好。要記得, 平行運算不是沒有代價的, 並不是套上平行運算就一定會讓程式變快, 它經常剛好相反。而且很多時候, 應不應該採用平行運算, 要視情況而定, 最好是經過實際測試再來決定; 你可以參考我寫的這一篇:「[入門][LINQ] PLINQ 簡介」。通常 PLINQ 會「聰明」地幫你決定要不要採用平行處理, 但是你也可以自己做決定以取代 PLINQ 的決定, 這是因為 PLINQ 的決定不見得是最好的。取決的標準是什麼? 那就是你自己必須有一套衡量效能的方法, 你必須自己去測試才會知道怎麼做才是最好的。


    2012年9月16日 上午 10:00
  • 我現在還有個搞不清楚的疑問

    就是假如我真的要使用plinq的技術了  那在SQL Server建立的資料表一定要存在SQL server compact下嗎?

    我現在搞不懂  sql server 的伺服器類型  有分database engine 跟 SQL server compact 

    我怎麼聽說SQL server compact 才是本機資料庫(sdf)   那存在database engine 的資料就不是本機資料瞜?

    我目前的資料都是使用database engine伺服器類型  是不是代表我要使用plinq 要將資料轉移至SQL server compact 上呢?

    2012年9月16日 上午 11:59
  • SQL Compact 是簡易型的資料庫, 跟你使不使用 PLINQ 應該沒有關係。SQL Server 當然也可以裝在本機, 一點也不影響。

    我前面問你是不是裝在本機, 只是要確定你的問題是否屬於 IO-Bound 而已。


    • 已標示為解答 向恩 2012年9月17日 上午 12:17
    2012年9月16日 下午 03:50