共用方式為


最佳化的查詢資料模式

最簡單、最快的資料查詢模式是:

  1. 單一表格或檢視
  2. 在伺服器上預先篩選至您需要的內容
  3. 欄位針對預期的查詢已正確編製索引

當您設計應用程式時,您需要考慮如何快速查詢資料。 查詢資料的最佳方式是使用包含您所需所有資訊的單一資料表或檢視,並在伺服器上篩選資料,然後再在應用程式中顯示資料。 您還需要確認用於篩選或排序資料的資料行已正確建立索引。 這使您的應用程式更快、更流暢。

例如,假設您有一個圖庫,其中顯示客戶及其銷售人員的清單。 如果您將客戶和銷售人員資訊儲存在個別的資料表中,則需要使用查閱來取得每個客戶的銷售人員名稱。 這會降低您的應用程式速度,因為它需要對另一個資料表執行許多查詢。 更好的方法是建立一個檢視,將客戶和銷售人員資訊結合在一個資料表中,並將該檢視用作資源庫的資料來源。 然後,您的應用程式只需要執行一個查詢,即可取得所需的所有資料。

查詢速度和資料正規化之間需要權衡。 資料正規化表示您只儲存一次資料,並避免重複。 這有助於保持數據的一致性和準確性。 但是,有時您需要複製一些數據以使查詢更快、更容易。 您需要在應用程式設計和表格結構中平衡這兩個目標。 否則,您的應用程式會緩慢且延遲,因為它需要執行大量工作來篩選和聯結來自不同資料表的資料。

使用伺服器端檢視

視圖可能是協助平衡這些目標的最常見工具。 它們會呈現查詢的單一資料表結構、針對查詢中所需的資料預先篩選資料,以及啟用查閱和聯結至其他資料表。 因為檢視的篩選、查閱和聯結是在伺服器上計算的,所以承載和用戶端計算都會最小化。

圖庫可以顯示資料來源中的許多記錄。 但有時,您需要顯示來自另一個資料來源的與原始資料來源相關的其他資訊。 例如,您有一個顯示客戶列表的畫廊,並且您想要顯示指派給每位客戶的銷售人員的姓名。 銷售人員的姓名儲存在與客戶資訊不同的資料來源中。 若要顯示銷售人員的姓名,您需要使用查閱函式,在其他資料來源中尋找相符的記錄。 這會以查找值擴充原始資料表。

但是,如果您有很多記錄和很多查找,則展開表格可能會非常慢。 針對資源庫中的每筆記錄,應用程式必須對其他資料來源執行個別查詢,並取得查閱值。 這表示應用程式可能需要針對每筆記錄執行許多查詢,這可能需要很長時間並影響應用程式效能。 這種反模式有時被稱為“N 平方,(n^2)”或“N+1”問題。

使用 StartsWith 或 Filter

Power Fx 提供數種搜尋資料的方法。 一般而言,請使用利用索引 (例如 StartsWithFilter ) 的運算式,而不是讀取整個資料表 (例如 In) 的運算式。 In 運算子適用於記憶體中集合或如果外部資料來源表格非常小。

考慮複製資料

有時,資料在查詢中的存取速度很慢,因為它儲存在不同的位置或格式中。 為了使查詢更快,您可以複製慢速數據並將其儲存在本地快速且易於查詢的表格中。 然而,這意味著本地數據可能不是原始數據的最新版本。 然後執行另一個進程,定期更新本機資料。 此程式可以是 Power Automate 流程、外掛程式、預存程序,或任何其他可將資料從一個位置移至另一個位置的方法。

更新本端資料的頻率需求取決於您的業務需求。 您的應用程式的資料需要多新? 例如,假設您為 Contoso 工作,這是一家銷售腳踏車的公司。 可用自行車的清單儲存在產品資料庫中,您可以透過自訂連接器中的 API 存取該資料庫。 但假設 API 呼叫速度很慢,因此您決定複製產品資料並將其儲存在本機表格中。 然後,您可以建立檢視,將您的資料表與應用程式的其他相關資料結合。 您也可以建立每天執行的 Power Automate 流程,並使用 API 中的最新產品資料更新您的資料表。 這樣您的應用程式就可以更快地查詢本地數據,而且資料最多只有一天的歷史。

複製資料是企業級應用程式中常見的技術類型,可確保良好的效能。 您可以使用 Dataverse 外掛程式、預存程序或資料移動,將資料複製到針對查詢進行最佳化的單一資料表中。 關鍵問題是:這些數據必須有多即時? 如果您可以承受一些延遲,您可以使用此技術來加速您的應用程式。

Suggestions

為了實現這一目標,請考慮以下問題和建議:

  1. 對於客戶來說,查看資源庫或資料格線中的資料值有多重要? 首先選擇記錄,然後在表單中顯示數據是否可以接受?
  2. 視圖可以執行必要的前置工作,以正確格式查看資料嗎?
  3. 您是否使用「IN」運算子,其中「StartsWith」將起作用?
  4. 您的資料需要有多新? 是否有資料複製策略可用來讓查詢預設在單一資料表上運作?