高效能的大型系統經驗 資料查詢與分頁

2021-08-23 12:44:55 字數 918 閱讀 1972

本文討論針對大型資料表(記錄數2千萬以上)進行資料查詢與分頁的可行的高效方案。

首先,恰當的索引是必須的。

沒有索引的支援,在大資料表中進行查詢是不可思議的。關鍵點在於如何建立索引?

1.建立正確的聚集索引(clustered index)。由於聚集索引的葉子節點就是記錄本身,所以選擇哪個索引為聚集索引非常關鍵。通過聚集索引掃瞄記錄更快。

2.根據你的系統的需求總結常用的單個查詢條件或綜合性的查詢條件,對於常用的單個查詢條件建立單列索引,對常用的綜合性查詢條件建立聯合索引

3.關於資料庫查詢引擎如何利用索引,要注意以下幾點:

(1)對於單列索引,只要條件列中出現索引列,無論在什麼位置,都能利用索引查詢。

(2)查詢條件中出現聯合索引第一列,或者全部,則能利用聯合索引。

(3)條件列中只要條件相連在一起,無論前後,都會利用上聯合索引。

(4)查詢條件中沒有出現聯合索引的第一列,而出現聯合索引的第二列,或者第三列,則都不會利用聯合索引查詢。

接下來,我們看如何進行分頁。

1.利用索引(或聯合索引)將滿足條件的記錄的主鍵列into到乙個臨時表(只有一列,與目標表的主鍵對應)。

2.count (*) 臨時表獲取滿足條件的記錄的總數。

3.從臨時表中獲取第n頁的主鍵值集合。

4.根據主鍵值集合從目標表中取出對應的記錄以構成所要的page。

5.釋放臨時表。

按照這種方式進行分頁查詢,如果滿足條件的記錄數在幾萬以內,分頁查詢都可在1秒內返回。

最後提醒一句,不要輕易的在大資料表上執行不帶條件的select count(*) from table,該操作將非常耗時,而且由於掃瞄時會在目標表上加s鎖,這段期間對目標表的insert/update/delete操作將被阻塞,從而可能引發insert/update/delete操作執行超時。

高效能的大型系統經驗 將資料分類 並快取

對大多數大型系統而言,資料庫往往是最容易出現瓶頸的地方,而通過使用恰當的快取技術可以非常有效地減輕資料庫的負載。將系統中用到的所有資料進行分類,分別對待不同種類的資料而不是一視同仁,有利於正確地做出快取哪些資料 以及如何快取的決策。我通常將系統中用到的資料分為四類 恆定不變的資料,只發生增量的資料,...

Impala 高效能 低延遲的大資料查詢引擎

impala提供對大資料更快速,互動式 sql查詢。impala支援對儲存在hdfs hbase及s3等資料查詢。impala使用和hive相同的元資料 sql定義 odbc驅動及使用者介面。impala提供實時 批資料的統一查詢平台。impala是對現有大資料查詢工具的補充,不能替代基於hive的...

SQL Server資料庫的高效能優化經驗總結

小編以前在做asp及.net的時候經常用到sql server,現在用php雖然大多數時候用mysql,但不泛有些客戶要在原來sql的平台上公升級或相容開發,值得慶幸的是php無所不能,基本上所有的資料庫它都能連線並支援,本文主要向大家介紹的是正確優化sql server資料庫的經驗總結,其中包括在...