none
mdf檔 與SQL Server的效能 RRS feed

  • 問題

  • 大家好:

         有一個觀念問題想請問專家 : 為了開發方便 , 我的專案使用mdf(SQL Database file)檔來當資料來源 , 我想了解的是 , 這與連結SQL Server中的資料庫有何不同 ? 效能會比較低嗎 ?  先感謝回覆者.

    2011年6月17日 上午 01:33

解答

  • sql本身資料庫就是mdf檔案,
    sql支援動態mdf掛載的原因是因為以前在開發時只要跟資料庫有關就很難移植專案或測試,因為專案相關檔案都能直接用copy方式處理,但資料庫不能,故在sql 2005後開始支援動態mdf掛載機制,方便專案能夠直接將環境用copy方式處理即可,所以這項功能的目的是為了在開發時方便測試或移轉使用,但如果是上線環境,建議還是直接建立於sql server上.

     

    關於動態掛載mdf的使用方式這邊有個例子

    如果你要測試一個專案,而此專案會於db異動一些資料,而每次測試完後希望把相關資料恢復,如果在以前這會非常麻煩.

    但用動態掛載後就容易許多,只需要在專案新增一個sql mdf並將其預設資料先行設定好,然後設定部屬時copy to output directory選項為copy always.而connection string指向此部屬後之複製的mdf.就能解決此問題.

    另外這個專案也可以很容易的直接copy專案目錄移轉到其他電腦,像在網路上有很多sample code就能直接用此方式複製下來直接執行,但如果是以前,就必須先建立sql db並建立好相關table,以及修改專案中的conneciton string位置與帳密.光是要run個sample code程序就一堆.

     


    • 已標示為解答 jeff-huangch 2011年6月17日 上午 09:03
    2011年6月17日 上午 01:50
  • 應該是沒有差別,但未實際測試過,但很明顯的動態掛載的方式啟動時應該會比較慢.
    不過我覺得這些都可以忽略,因為SQL效能的差距Query方式才是主因.
    • 已標示為解答 jeff-huangch 2011年6月17日 上午 09:03
    2011年6月17日 上午 05:15

所有回覆

  • sql本身資料庫就是mdf檔案,
    sql支援動態mdf掛載的原因是因為以前在開發時只要跟資料庫有關就很難移植專案或測試,因為專案相關檔案都能直接用copy方式處理,但資料庫不能,故在sql 2005後開始支援動態mdf掛載機制,方便專案能夠直接將環境用copy方式處理即可,所以這項功能的目的是為了在開發時方便測試或移轉使用,但如果是上線環境,建議還是直接建立於sql server上.

     

    關於動態掛載mdf的使用方式這邊有個例子

    如果你要測試一個專案,而此專案會於db異動一些資料,而每次測試完後希望把相關資料恢復,如果在以前這會非常麻煩.

    但用動態掛載後就容易許多,只需要在專案新增一個sql mdf並將其預設資料先行設定好,然後設定部屬時copy to output directory選項為copy always.而connection string指向此部屬後之複製的mdf.就能解決此問題.

    另外這個專案也可以很容易的直接copy專案目錄移轉到其他電腦,像在網路上有很多sample code就能直接用此方式複製下來直接執行,但如果是以前,就必須先建立sql db並建立好相關table,以及修改專案中的conneciton string位置與帳密.光是要run個sample code程序就一堆.

     


    • 已標示為解答 jeff-huangch 2011年6月17日 上午 09:03
    2011年6月17日 上午 01:50
  • sql本身資料庫就是mdf檔案,
    sql支援動態mdf掛載的原因是因為以前在開發時只要跟資料庫有關就很難移植專案或測試,因為專案相關檔案都能直接用copy方式處理,但資料庫不能,故在sql 2005後開始支援動態mdf掛載機制,方便專案能夠直接將環境用copy方式處理即可,所以這項功能的目的是為了在開發時方便測試或移轉使用,但如果是上線環境,建議還是直接建立於sql server上.

     

    關於動態掛載mdf的使用方式這邊有個例子

    如果你要測試一個專案,而此專案會於db異動一些資料,而每次測試完後希望把相關資料恢復,如果在以前這會非常麻煩.

    但用動態掛載後就容易許多,只需要在專案新增一個sql mdf並將其預設資料先行設定好,然後設定部屬時copy to output directory選項為copy always.而connection string指向此部屬後之複製的mdf.就能解決此問題.

    另外這個專案也可以很容易的直接copy專案目錄移轉到其他電腦,像在網路上有很多sample code就能直接用此方式複製下來直接執行,但如果是以前,就必須先建立sql db並建立好相關table,以及修改專案中的conneciton string位置與帳密.光是要run個sample code程序就一堆.

     


    謝謝您的回覆 , 除了以上方便專案測試之外 , 連結SQL Server與使用mdf檔在效能上有差嗎? 如果我把SQL query透過SQL Server編譯執行 , 是否效能會比較好?

     

    2011年6月17日 上午 02:16
  • sql本身資料庫就是mdf檔案,
    sql支援動態mdf掛載的原因是因為以前在開發時只要跟資料庫有關就很難移植專案或測試,因為專案相關檔案都能直接用copy方式處理,但資料庫不能,故在sql 2005後開始支援動態mdf掛載機制,方便專案能夠直接將環境用copy方式處理即可,所以這項功能的目的是為了在開發時方便測試或移轉使用,但如果是上線環境,建議還是直接建立於sql server上.

     

    關於動態掛載mdf的使用方式這邊有個例子

    如果你要測試一個專案,而此專案會於db異動一些資料,而每次測試完後希望把相關資料恢復,如果在以前這會非常麻煩.

    但用動態掛載後就容易許多,只需要在專案新增一個sql mdf並將其預設資料先行設定好,然後設定部屬時copy to output directory選項為copy always.而connection string指向此部屬後之複製的mdf.就能解決此問題.

    另外這個專案也可以很容易的直接copy專案目錄移轉到其他電腦,像在網路上有很多sample code就能直接用此方式複製下來直接執行,但如果是以前,就必須先建立sql db並建立好相關table,以及修改專案中的conneciton string位置與帳密.光是要run個sample code程序就一堆.

     


    謝謝您的回覆 , 除了以上方便專案測試之外 , 連結SQL Server與使用mdf檔在效能上有差嗎? 如果我把SQL query透過SQL Server編譯執行 , 是否效能會比較好?

     

    就我所知mdf檔一樣得掛在SQL Server上才能執行,你在VS裡面建立MDF,是透過VS幫你以檔案形式掛到SQL SERVER,所以效能好壞是依照你的資料庫架構及TSQL等因素來決定。

    PS:預設是掛在SQL SERVER EXPRESS的預設執行個體。


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年6月17日 上午 04:32
  • 應該是沒有差別,但未實際測試過,但很明顯的動態掛載的方式啟動時應該會比較慢.
    不過我覺得這些都可以忽略,因為SQL效能的差距Query方式才是主因.
    • 已標示為解答 jeff-huangch 2011年6月17日 上午 09:03
    2011年6月17日 上午 05:15
  • 應該是沒有差別,但未實際測試過,但很明顯的動態掛載的方式啟動時應該會比較慢.
    不過我覺得這些都可以忽略,因為SQL效能的差距Query方式才是主因.

    其實我也覺得應該沒有差別 , 但我覺得SQL Server與SQL Server express兩者應該有差 , 希望有人可以說明一下 , 我也會實測看看 , 之後再與大家分享 .謝謝您的回覆!
    2011年6月17日 上午 09:07
  • 靜態可以開多個檔對應單一資料庫... 可提高效能。

    動態掛載就不知道了~


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年6月17日 下午 05:18
  • 差在CPU限制吧。

    http://sharedderrick.blogspot.com/2008/09/sql-server-2008-express-edition.html


    謝謝阿尼參與討論 , 當初會思考到express版效能可能比較低 , 也是從expree的單CPU限制這部份想起 , 看完了參考網址的文章 , 仍不解的是 ,當我們寫程式時 , 向database提出一個 query或insert操作時 , SQL Server會用到多核心運算嗎?還是多核心是為應付同時其他的query等操作?

    假設今日我有100個insert動作要分次執行 , 我可以寫成多執行緒同時進行(分擔這100個insert) , 我的想法是expree版受限單核心 , 其他版本則可以發揮多核心來處理多執行緒提出的要求.

    我發現這裡真的高手如雲 , 真是的獲益良多 .

     

    2011年6月19日 上午 12:17