首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

DotNetNuke 自訂表單模組資料結構(一):UDT 三表結構深度剖析與效能瓶頸

     編輯:關於ASP.NET

UDT 以三張表支撐無限欄位動態表單,結構極度精簡:UserDefinedFields(結構定義)、UserDefinedRows(主鍵)、UserDefinedData(明細值,FieldValue 用 ntext)。同樣設計見於 DNN TabModuleSettings(用 nvarchar(2000))。

資料存儲實例

表單:姓名、性別、年齡。資料:張三、男、25。資料庫實際存儲:

  • Rows 表:RowID=2
  • Data 表:三筆記錄,FieldID=10/11/12 對應姓名/性別/年齡,FieldValue 存對應值。

讀取橫向資料的痛苦:LEFT JOIN 地獄

SELECT R.UserDefinedRowID,
  D1.FieldValue As 姓名,
  D2.FieldValue As 性別,
  D3.FieldValue As 年齡
FROM UserDefinedRows R
LEFT JOIN UserDefinedData D1 ON R.UserDefinedRowID=D1.UserDefinedRowID AND D1.UserDefinedFieldID=10
LEFT JOIN UserDefinedData D2 ON R.UserDefinedRowID=D2.UserDefinedRowID AND D2.UserDefinedFieldID=11
LEFT JOIN UserDefinedData D3 ON R.UserDefinedRowID=D3.UserDefinedRowID AND D3.UserDefinedFieldID=12
WHERE R.UserDefinedRowID=2

30 欄位即 30 個 JOIN,SQL 極長、效能極差。UDT 實際採「逐筆讀取→記憶體動態建 DataTable」方式,更慢。團隊負責人承認不適合大量資料——這是結構性問題。

突破口:重新設計資料結構

要支援百萬級資料,必須重構:保留動態擴充優勢,消除 JOIN 與記憶體組裝。下文將詳細介紹優化方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved