我有一個表,有很多行(300萬),我需要從我的應用程序中的幾個點查詢一些行。我發現這樣做的方式是首次查詢所有需要的數據,並將其存儲在static DataTable
與SqlAdapter.Fill()
的應用程序餘下時間。如何從SQL Server緩存一個大表
這很快,因爲那時我需要使用DataTable.Select("some query")
,應用程序處理的信息很好。
問題是這張表需要大約800MB的RAM,我必須在PC上運行這個應用程序,它可能太多了。
我認爲的另一種方式是每次查詢我需要的數據。這需要很少的內存,但性能較差(對數據庫的很多查詢,這是在一個網絡地址,並有1000個查詢,你開始注意到ping和所有這些..)。
性能和內存使用率之間是否存在中間點?
編輯:我正在檢索的是銷售,其中有一個日期,產品和數量。我按產品查詢,並沒有以這種方式索引。但無論如何,作出1000個查詢,即使查詢花了0.05s,0.2s ping總共200秒...
數據庫性能調優的一般規則是僅檢索所需的數據,然後圍繞該數據設計索引策略。聽起來你不是這樣做的;你可以提供更多關於正在運行的查詢和正在使用的索引的詳細信息嗎? –
在這裏有一個類似的帖子,檢查http://stackoverflow.com/questions/23816130/forcing-sql-server-to-pre-cache-entire-database-into-memory – sriharichander
這是一個想法:使用delta拉動。只提取需要的數據並將其存儲在集合中,繼續操作。當然,在發送請求獲取數據之前,如果您的查詢關鍵字已經存在於您的現有集合中,請比較它們。 – singsuyash