難題:
1.当客户用了几年后数据变得很庞大分页速度缓慢得要命几乎到了无法忍受的程度。
2.分页到最后一页时往往速度很慢会有死机现象出现,特別是記錄條數很多時死機現象比較多。
解决问题的方法步骤
1.首先优化数据库,先從数据库字段類型優化開始入手。
先把數據庫裡的datetime 都修改为 smalldatetime,数据库可以變小幾百M,最起碼磁盤的讀取壓力可以得到減小。由於數據庫數據有一千萬條,無法用管理工具修改結構(若硬要使用,則會出現超時現象),只能用SQL語句執行命令。
alter table testData_rpt alter column crateDate_rpt smalldatetime null
2.接著優化數據庫索引
把多余索引通通刪除,然後重新建立索引,因為記錄數太龐大,有多余的索引會使數據庫變得龐大。
把主鍵(primary key)設置為倒序的、非聚集的(no Clustered),這樣的好處是可以把最新的數據排序在最前面。
把主要查詢的條件設置為索引,GroupBy的放第一個位置然後設置為聚集索引,這樣的好處是查詢時會快好多好多。
完成此步驟後分頁速度快好多最起碼無死機現象。
3.重點優化,數據庫分頁的存儲過程。分頁是用了select top N的反轉方式,把最後一頁到底獲取多少條記錄准確數字計算出來。