如何加快基於密鑰提取多個對象的查詢?如何加速從多個表中提取單個對象的查詢?
例如(原諒我的人爲的例子),說我有多個表紙,文件,和SQL Server 文件。每個文件記錄有一個文件「父」,每個文件記錄有一個紙「父」。一篇論文可能有多個文件,因此最終會有多個與該論文相關的文件。
紙臺
int Paper_Key - PK
varchar Paper_Name
文獻表
int Document_Key - PK
int Paper_Key
varchar Doc_Name
文件表
int File_Key - PK
int Document_Key
從文件級別,說我們要檢索文檔和與特定文件相關聯的文件(有幾百萬行的所有這些表)。
我最初的想法是將我的工作單元模式與我的通用存儲庫一起使用,並按鍵檢索每條記錄。
服務方法
public MyViewModel GetFileWithDetails(int fileId)
{
File file = _unitOfWork.FileRepository.GetById(fileId);
Document doc = _unitOfWork.DocumentRepository.GetById(file.Document_Key);
Paper paper = _unitOfWork.PaperRepository.GetById(doc.Paper_Key);
var model = new MyViewModel
{
FileKey = file.File_Key,
// etc etc
}
return model;
}
通用庫法
internal MyDBEntities context;
internal DbSet<TEntity> dbSet;
public GenericRepository(MyDBEntities context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public TEntity GetById(object id)
{
return dbSet.Find(id);
}
會不會有什麼辦法更快地執行這個查詢?我對大多數其他頁面(細節,列表)使用相同的模式,但從多個表中選擇似乎需要更多的時間 - 特別是因爲每個查詢都必須等待前一個結果能夠執行。
編輯 不幸的是,表格之間沒有關係。只有鑰匙。我要求繪製關係,但是由於空值或某些原因,SQL不會允許......我不負責這些表格。
嘗試將索引添加到參照鍵,然後重建索引以查看一些性能改進。 – Saravanan