oracle mysql |
數(shù)據(jù)挖掘各類算法中,常常需要遍歷整個(gè)數(shù)據(jù)庫(kù)(表)。現(xiàn)實(shí)中的數(shù)據(jù)庫(kù)可能十分大,往往不可能通過(guò)一個(gè)簡(jiǎn)單的Select *的方式遍歷提取數(shù)據(jù)表內(nèi)的所有元組。 直接用Select * 的方式存在兩大問(wèn)題,一是Select *過(guò)后,可能要等很久數(shù)據(jù)庫(kù)才能將所有信息提交完畢,第二是得到的結(jié)果可能是很大,遠(yuǎn)遠(yuǎn)超過(guò)內(nèi)存的限制。 現(xiàn)在各種主流的數(shù)據(jù)庫(kù)都支持了分頁(yè)查詢的方式。 以Oracle為例,通過(guò)rownum關(guān)鍵字可以獲取指定的行區(qū)間。 以MySQL為例,提供了limit關(guān)鍵字,更加方便獲取中間某區(qū)間的行數(shù)據(jù)。 Hibernate這樣的數(shù)據(jù)持久層提供的分頁(yè)查詢,可以屏蔽掉各個(gè)不同的數(shù)據(jù)庫(kù)之間具體SQL實(shí)現(xiàn)差異。 網(wǎng)上到處都可以搜尋到關(guān)于Hibernate內(nèi)部實(shí)現(xiàn)分頁(yè)查詢的解讀的文章??梢钥吹?,Hibernate內(nèi)部也是通過(guò)rownum,limit這些關(guān)鍵字來(lái)實(shí)現(xiàn)分頁(yè)的。 |