1. 程式人生 > >使用Linq查詢資料進行分頁時遇到的效能問題

使用Linq查詢資料進行分頁時遇到的效能問題

最近需要對客戶的系統進行升級,在對一張記錄只有7767條記錄的表進行分次查詢時,每次查詢500條,16次查詢居然使用了2分鐘時間。程式碼如下:

public static List<T> GetList(int pageIndex, int pageSize, out int count)
        {
            using (var db = new ClientDBDataContext(DBHelper.DBConString))
            {
                var query = db.DataBase_Table;

                count = query.Count();
                return query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
            }
        }


除錯結果顯示,一次比一次查詢的時間長,到第14次查詢時,耗時20s之多,不忍直視,那還有記錄達到百萬條的又該如何???

baidu…… google……

其答案:

排除硬體原因,有以下可能:
1.你的OOXX寫的不好,沒利用到索引
2.表設計的不好,欄位過多,導致返回資料過大
3.zp物件的建構函式/各屬性有沒有自定義加入了耗時的處理?
4.用ef的話,關閉proxy,關閉自動偵測實體狀態

分析上述貌似都不對,當檢視DataBase_Table的LINQ擴充套件時,發現了AsParallel(),檢視說明:啟用查詢的並行化。

程式碼:

public static List<T> GetList(int pageIndex, int pageSize, out int count)
        {
            using (var db = new ClientDBDataContext(DBHelper.DBConString))
            {
                var query = db.DataBase_Table.AsParallel();

                count = query.Count();
                return query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
            }
        }

執行,整個16次查詢不到1s。

看來程式碼的優化在某些時候是非常重要的……

相關推薦

使用Linq查詢資料進行遇到的效能問題

最近需要對客戶的系統進行升級,在對一張記錄只有7767條記錄的表進行分次查詢時,每次查詢500條,16次查詢居然使用了2分鐘時間。程式碼如下: public static List<T> GetList(int pageIndex, int pageSize,

(轉)當使用Pagehelper進行數不在實際數之內依舊有資料返回

記錄一個Pagehelper的深坑 在使用Pagehelper寫程式時遇到一個問題,在資料很多的表裡使用這個分頁一開始是沒有問題的每頁的資料都能顯示,但是在資料比較少的表中使用Pagehelper進行分頁時就出問題了 不管頁碼超出多少一直都會返回資料,無論怎麼修改都不行 頭都大了,最後在

MySQL - 當LIMIT 進行,為什麼出現了重複資料

哦,這時寫的一個破SQL,遺留了個問題,沒有去注意,所以造成了,有重複資料。因為引用了 PageHelper 外掛,期初還以為是 外掛有問題。後來想想,畢竟整個框架都是用的這個外掛,就算有問題早應該會出現了。所以,第一時間想到了SQL,的確,去了排序就沒有問題。 說在前面

linq查詢集合並展示資料

private void Bind() { if (Request.QueryString["QuestionNo"] != null) {

使用mysql的limit進行出現重複問題

使用MySQL的limit進行分頁時,例如 select  * from table_1 where 1=1 limit m,n 這樣後面的頁可能會出現重複資料,這時可以通過加入order by 子句來解決這種情況, select * from table_1  w

根據某個條件或者某些條件對資料庫進行查詢,然後把查詢結果進行顯示

一、.固定條件,直接查詢資料庫,把結果進行分頁顯示出來; 見部落格 https://blog.csdn.net/qq_37591637/article/details/82951647 二、條件不定,查詢資料庫,把查詢結果進行分頁顯示 如下圖;包含四個條件,使用者在選擇的時候可以選擇

php用pdo操作資料庫,進行,$pageSize出現錯誤,怎麼回事

在用pdo操作資料庫的時候,一定要注意傳參得順序, 比我我這裡傳參順序錯了,弄了一個半小時才解決: // 分頁的演算法 public function pages($page, $pageSize = 2) { $count = $this->c

Laravel5.5+ 對陣列(物件陣列)資料進行

在使用 Laravel 時,除了在 ORM 中使用分頁外,有些時候也需要對用原生 sql 查詢的資料進行分頁,該查詢資料可能是陣列,也可能是物件陣列. 支援陣列格式: $goods = [ [],[],[] ];  陣

利用外掛對Ajax請求到後臺資料進行

1.在學習過程中,積累和思考是必須的,所以我還是選擇用部落格一邊記錄一邊學習 一款簡單的分頁外掛下載地址: 解壓之後分別把.css檔案和.js檔案匯入相應的專案資料夾中,並且在頁面中進行路徑引入,確保無誤。 具體做法前臺: 分頁:`

如何實現從資料庫中取出的列表資料進行功能?

一、你需要先建立一個bean物件(也就是page物件) 創建出你需要的屬性比如在我的專案中我需要用到的:有當前的頁碼currentPage 當前的頁顯示的數量currentCount 你從資料庫中查

利用redis快取對 list集合中的資料 進行操作(一)

先說 儲存的結構:  這裡做了兩塊快取  綠色是儲存索引的快取  黑色是存資料的快取 翻頁時需要兩個引數  向上查詢/或向下查詢    還一個是   從第二頁開始查詢時需要一個索引的引數 有了這兩個引數 就可以利用redis 中提供的方法進行操作 第一個是 jedis.z

django查詢及對已經資料進行查詢,對條件查詢後的資料再次

#適用於妹子UI的分頁前端,其他的也沒問題,稍做修改即可 #對已經分頁的資料進行查詢,對查詢後的資料再次進行分頁 #思路:url請求除了需要帶current page 還需要帶查詢的內容,以此判斷是否查詢後的資料分頁 直接上程式碼: pages:包含兩個類1. Pagination表示對全部

Mongodb 根據時間分組查詢出要顯示的資料進行

MongoDB提供聚合管道技術進行處理輸入的資料,資料經過一個一個的stage,每個stage將資料處理後的結果傳遞給下一個stage,最終得到多重處理後的結果。  Aggregate提供了多種stage可供選擇,match、match、sort、limit、limit、l

使用Hibernate criteria進行查詢,如何實現一次查詢取得總記錄數和後結果集

可先使用 Projections.rowCount() 來取得總記錄數,如下: Long totalNum = (Long)criteria.setProjection(Projections.rowCount()).uniqueResult(); 然後將 Project

關於小工具對數據庫進行查詢

處理 會有 acl AC 多線程 sql數據庫 定時 connect 三次 需求:關於第三方數據庫的數據抽取,數據每2個小時會有增量數據。 要求:每天淩晨12:05對T-1日數據進行統一處理。 於是利用1周時間開發了個小工具,主要對接第三方oracle,pg,mysql數據

基於ArcGISServer進行矢量查詢的方案進階

eat 全部 數據傳輸 family 要求 ron 形式 objectid 返回結果 文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/ 1. 背景 在空間查詢中,我們對查詢結果

C#/Entity Frame Core 使用Linq 進行 .Skip() .Take() 的使用方法

一般使用格式為 int pagesize = 分頁大小(每一頁大小)int pageindex = 第幾頁(一般這個變數是隨迴圈遞增的) 使用方法.Skip(pagesize*pageindex).Take(pagesize) .Skip()   忽略數,表示從哪裡開始分

jsp 利用c標籤的begin end 屬性進行查詢

當只是查詢某一張表的時候,如果想要顯示在頁面上,但是查詢的結果多的話,就涉及到分頁查詢 也就是:  String sql="select * from person_info limit ?,?";    但是: 如果查詢的是多張表,把各張表中

從redis中取值 然後通過list進行查詢

1.首先是往redis中存入資料:                                     tota

java.util.List介面的方法subList()進行查詢

java.util.List中有一個subList方法,用來返回一個list的一部分的檢視。   List<E> subList(int fromIndex, int toIndex);把list進行分頁,其中以pagesize為每頁資料的個數,然後從第一頁開始依次輸出每頁的資料直至