自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關(guān)于數(shù)據(jù)庫(kù)水平切分中分頁(yè)查詢問題的解決方案

數(shù)據(jù)庫(kù) SQL Server
本文我們主要介紹了數(shù)據(jù)庫(kù)水平切分中分頁(yè)查詢的問題的解決方案,希望本次的介紹能夠?qū)δ兴鶐椭?/div>

數(shù)據(jù)庫(kù)水平切分中分頁(yè)查詢的問題是本文要介紹的主要內(nèi)容。接下來我們通過一個(gè)例子來說明:昨天淘寶的同事問了我一個(gè)技術(shù)培訓(xùn)上講師問的問題:我們對(duì)數(shù)據(jù)庫(kù)關(guān)于商品的表放在了2個(gè)庫(kù),分別是A庫(kù)和B庫(kù) ,每個(gè)庫(kù)1張表,然后將id為奇數(shù)的放到A庫(kù)中,id為偶數(shù)的放到B庫(kù)中,現(xiàn)在需要查詢價(jià)格在100-200之間的商品,并根據(jù)銷量來排序,請(qǐng)給出具體的查詢方案,然后總結(jié)這個(gè)方案有什么缺點(diǎn)。

1.保證查詢結(jié)果正確性的方式:

比如查詢第1-20條記錄的時(shí)候,就得在A庫(kù)中執(zhí)行

 

  1. select*  
  2.  
  3. fromxxx  
  4.  
  5. wherexxx.price>=100and  
  6.  
  7. xxx.price<=200  
  8.  
  9. orderbyxxx.sales_volume  
  10.  
  11. limit0,20 

 

然后B庫(kù)也同樣執(zhí)行這樣的SQL,***在程序中將2個(gè)數(shù)據(jù)庫(kù)返回的結(jié)果作一次合并,再取前20條返回給用戶

但是這樣就帶來一個(gè)問題,你是不知道到底前20的數(shù)據(jù)是怎么分布的,是10條在A庫(kù),10條在B庫(kù),還是15條在A庫(kù),5條在B庫(kù),當(dāng)用戶翻到第二頁(yè)的時(shí)候,就得在A庫(kù)中查詢前40條記錄,B庫(kù)中也查詢前40條記錄出來了...越是后面的頁(yè)數(shù),需要查詢的量就越大(PS:當(dāng)然你可以忽悠自己說絕大部分用戶最多就看前3頁(yè)的結(jié)果)

2.保證性能的方式:

這個(gè)就隨意得多了,為了保證性能,正確性是不太可能保證的,可以每次在A庫(kù)查10條,B庫(kù)查10條,然后直接返回,結(jié)果肯定和實(shí)際的結(jié)果有出入,但相差不至太多,不是每個(gè)用戶都會(huì)發(fā)現(xiàn)第2頁(yè)的商品可能出現(xiàn)銷量比第1頁(yè)的商品銷量還要大的情況。

以上兩種方法都各有優(yōu)缺點(diǎn),但***的結(jié)果可能都不是我們想要的,可是問題出在哪?貌似只有這2種方法了。

其實(shí)這里涉及到的是應(yīng)該如何去分庫(kù)的問題,如果結(jié)果是按id排序的話,這樣分庫(kù)顯然是沒問題的,但如果是按銷量排序的話,那數(shù)據(jù)庫(kù)分庫(kù)的時(shí)候其實(shí)應(yīng)該按銷量來切分,比如銷量在100以內(nèi)的放到A庫(kù),銷量在100-1000的放到B庫(kù),這樣查詢起來就輕松多了,最關(guān)鍵的就是要知道,我們分庫(kù)的規(guī)則應(yīng)該怎么去設(shè)定。

關(guān)于數(shù)據(jù)庫(kù)水平切分中分頁(yè)查詢的問題的解決方案就介紹到這里了,希望本次的介紹能夠?qū)δ兴鶐椭?/p>

【編輯推薦】

  1. 關(guān)于Oracle數(shù)據(jù)庫(kù)閃回個(gè)性的詳細(xì)介紹
  2. Oracle數(shù)據(jù)庫(kù)對(duì)DDL語句和DML語句的事務(wù)管理
  3. Oracle數(shù)據(jù)庫(kù)啟動(dòng)參數(shù)文件及相關(guān)SQL語句簡(jiǎn)介
  4. Oracle數(shù)據(jù)庫(kù)的幾種文件及表空間數(shù)據(jù)塊的知識(shí)簡(jiǎn)介
  5. Oracle數(shù)據(jù)庫(kù)查詢登錄用戶名所屬表空間及其使用情況
責(zé)任編輯:趙鵬 來源: CSDN博客
相關(guān)推薦

2009-11-18 16:10:00

2011-03-07 16:42:05

MySQL數(shù)據(jù)庫(kù)安全

2011-07-26 16:05:19

Oracle數(shù)據(jù)庫(kù)服務(wù)器

2010-05-27 18:24:09

MySQL數(shù)據(jù)庫(kù)密碼

2018-03-26 12:58:52

數(shù)據(jù)庫(kù)OracleMySQL

2011-03-28 13:11:18

MySQL數(shù)據(jù)庫(kù)安全

2011-03-03 18:09:14

2017-06-19 16:45:41

數(shù)據(jù)庫(kù)水平切分用戶中心

2010-05-13 10:27:24

MySQL數(shù)據(jù)庫(kù)

2011-08-23 10:02:26

Oracle數(shù)據(jù)庫(kù)存儲(chǔ)過程掛死

2011-03-24 15:41:42

數(shù)據(jù)庫(kù)

2011-01-21 09:43:10

安恒數(shù)據(jù)庫(kù)安全安全審計(jì)

2011-08-03 14:02:02

數(shù)據(jù)庫(kù)連接ACCESS

2021-10-04 09:14:18

ElasticSear深度分頁(yè)

2018-12-29 14:26:58

物聯(lián)網(wǎng)IOT物聯(lián)網(wǎng)設(shè)備

2010-05-28 11:22:07

2009-05-15 10:11:55

數(shù)據(jù)庫(kù)查詢查詢性能分頁(yè)瀏覽

2009-03-31 11:57:52

2012-07-23 14:30:33

Oracle

2024-02-06 07:56:20

數(shù)據(jù)庫(kù)分布式數(shù)據(jù)庫(kù)架構(gòu)產(chǎn)品
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)