資料探勘各類演算法中,常常需要遍歷整個資料庫(表)。現實中的資料庫可能十分大,往往不可能透過一個簡單的Select *的方式遍歷提取資料表內的所有元組。直接用Select * 的方式存在兩大問題,一是Select *過後,可能要等很久資料庫才能將所有資訊提交完畢,第二是得到的結果可能是很大,遠遠超過記憶體的限制。
現在各種主流的資料庫都支援了分頁查詢的方式。
以Oracle為例,透過rownum關鍵字可以獲取指定的行區間。
比如:
Select * from XX。TABLE1 where rownum = 50;
以MySQL為例,提供了limit關鍵字,更加方便獲取中間某區間的行資料。
比如: Select * from TABLE1 limit 50,100。 MySQL的limit關鍵字用起來比Oracle要方便一些。不過各個資料庫的分頁查詢的速度我倒沒有研究過,網上聽一些高手們說,Oracle提供的分頁查詢效率要高一些。
Hibernate這樣的資料持久層提供的分頁查詢,可以遮蔽掉各個不同的資料庫之間具體SQL實現差異。
Hiberante這樣的資料持久層工具一大好處就是可以遮蔽掉不同資料庫的之間的某些細節差異。
分頁查詢在不同的資料庫上實現的SQL不一樣,所以要統一,最好使用Hibernate這樣的工具。
Query q = session。createQuery("from Cat as c");
q。
setFirstResult(50);
q。setMaxResults(100);
List l = q。list();
網上到處都可以搜尋到關於Hibernate內部實現分頁查詢的解讀的文章。
可以看到,Hibernate內部也是透過rownum,limit這些關鍵字來實現分頁的。
資料探勘各類演算法中,常常需要遍歷整個資料庫(表)。現實中的資料庫可能十分大,往往不可能透過一個簡單的Select *的方式遍歷提取資料表內的所有元組。直接用Select * 的方式存在兩大問題,一是Select *過後,可能要等很久資料庫才能將所有資訊提交完畢,第二是得到的結果可能是很大,遠遠超過記憶體的限制。
現在各種主流的資料庫都支援了分頁查詢的方式。
以Oracle為例,透過rownum關鍵字可以獲取指定的行區間。
比如:
Select * from XX。TABLE1 where rownum = 50;
以MySQL為例,提供了limit關鍵字,更加方便獲取中間某區間的行資料。
比如: Select * from TABLE1 limit 50,100。 MySQL的limit關鍵字用起來比Oracle要方便一些。不過各個資料庫的分頁查詢的速度我倒沒有研究過,網上聽一些高手們說,Oracle提供的分頁查詢效率要高一些。
Hibernate這樣的資料持久層提供的分頁查詢,可以遮蔽掉各個不同的資料庫之間具體SQL實現差異。
Hiberante這樣的資料持久層工具一大好處就是可以遮蔽掉不同資料庫的之間的某些細節差異。
分頁查詢在不同的資料庫上實現的SQL不一樣,所以要統一,最好使用Hibernate這樣的工具。
Query q = session。createQuery("from Cat as c");
q。
setFirstResult(50);
q。setMaxResults(100);
List l = q。list();
網上到處都可以搜尋到關於Hibernate內部實現分頁查詢的解讀的文章。
可以看到,Hibernate內部也是透過rownum,limit這些關鍵字來實現分頁的。