2012-03-05 53 views
1

在訪問的性能哪一個enhace:確實存儲過程提高了數據庫的性能,爲什麼?

  • 具有存儲過程
  • 寫在VB代碼
  • 我們的查詢或寫入我們的查詢在數據源我們的控制財產的

    logicaly第一一個應該提高表現,但在這裏我讀了另一件事。你是什麼意思?

請問你能解釋我技術還是給我一個參考?

回答

1

存儲過程仍然需要執行。在Access中,它必須在您自己的計算機上執行,並且使用常規DBMS,它仍然需要在服務器上執行。哪種方法更高效取決於您正在解決的問題。

+0

謝謝你的回答,讓我解釋一下我scnario一點點更詳細: 我有一個包含10個控制和這些控制充滿了他們的查詢表格(他們只是簡單的SELECT查詢)的形式加載時。 – Baper 2012-03-05 12:51:20

+0

聽起來不像任何*附近*什麼東西需要存儲過程。你需要解決一些問題嗎? – alexis 2012-03-05 12:57:19

+0

表現,我想提高我的表現 – Baper 2012-03-05 13:40:55

2

如果您在談論MDB文件,那麼您必須使用「存儲過程」來引用保存的查詢。由於查詢計劃與查詢一起存儲,因此保存的查詢可以比在線SQL更快地執行;當您執行內聯SQL時,必須將SQL編譯爲查詢計劃。

如果你編寫一個查詢到控制的DataSource屬性,Access創建一個隱藏的保存查詢,這樣的表現應該是相似的。

更一般地說,您是否問這個問題是因爲您或您的用戶觀察到糟糕的表現?如果是這樣,那麼表現很差?這些信息可能有助於我們爲改善績效提供一個很好的機會。

例如,假設您的表單是訂單表單,並且您具有顯示客戶名稱和地址的文本框。表格的記錄來源是[Orders]表格。名稱文本框作爲其控制源

SELECT [CustomerName] FROM [Customers] WHERE [CustomerID] = [CustomerIdTextBox] 

同樣,在地址文本框中的控件來源:

SELECT [Address] FROM [Customers] WHERE [CustomerID] = [CustomerIdTextBox] 

在這種情況下,你會通過更改記錄源顯着改善你的表現:

SELECT [Orders].*, [Customers].[CustomerName], [Customers].[Address] 
FROM [Orders] INNER JOIN [Customers] ON [Orders].[CustomerID] = [Customers].[ID] 

的名稱文本框控件源然後換[CustomerName]和地址文本框[Address]

爲什麼這會更快?在第一個設計中,您有兩個查詢(或者,對於您從[Customers]表中抽取的每個項目的查詢)。在新設計中,您只有一個查詢。

如果,另一方面,則是問有關性能,因爲理論上的想法,一個方法可能比另一個快,那麼你應該使用最簡單維護的辦法。如果您無法觀察性能差異,則使用更高性能的解決方案沒有任何好處。

相關問題