本文討論針對大型資料表(記錄數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資料庫的經驗總結,其中包括在...