單表查詢的演變

單表查詢是互聯(lián)網(wǎng)業(yè)務(wù)中常用的手段.引入單表查詢后讥裤,數(shù)據(jù)庫負責簡單讀取數(shù)據(jù)跑筝,應用需要解決如何將查詢落到核心表上套利!

現(xiàn)有三張表:
品牌表t_brand(brand_name,brand_code),
類目表t_category(cat_name,cat_code),
產(chǎn)品表為t_product(product_name,product_code,brand_code,cat_code)
需要實現(xiàn)接口需求為:支持通過 品牌名稱悉默,類目名稱和產(chǎn)品編號進行查詢產(chǎn)品城豁。

按照傳統(tǒng)的解決方式:

select p.product_name,product_code from t_product p
join t_brand b on p.brand_code=b.brand_code
join t_catgory c on p.cat_code = c.cat_code
where b. brand_name like '%${品牌名稱}%'
and  c.cat_name like '%${類目名稱}%'
and  p.product_code = '${產(chǎn)品編號}'

這種方式的優(yōu)點;開發(fā)效率高,迅速支撐業(yè)務(wù)抄课。但是隨著業(yè)務(wù)的發(fā)展唱星,數(shù)據(jù)庫的數(shù)據(jù)量增加大,join的代價越來越大跟磨,數(shù)據(jù)庫的緩存使用率底下间聊。為了解決這些問題,通常引入單表查詢的方式來解決問題.

sql變成了:

select brand_code from  t_brand where brand_name like '%${品牌名稱}%';
select cat_code  from  t_brand where cat_name like '%${類目名稱}%';
select product_name,product_code from t_product
where brand_code in ('${brandCode}')
and cat_code in ('${catCode}')
and product_code = '${產(chǎn)品編號}';

業(yè)務(wù)是不斷發(fā)展的抵拘,為了解決產(chǎn)品表的單維度的查詢哎榴,決定引入tag表,幫助運營進行多維度的檢索.tag表t_tag(tag_code,tag_name),t_tag_product(id,tag_code,product_code)

需要實現(xiàn)接口需求為:支持通過品牌名稱,類目名稱尚蝌,產(chǎn)品編號和標簽編號 進行查詢產(chǎn)品信息

sql又變成:

select brand_code from  t_brand where brand_name like '%${品牌名稱}%';
select cat_code  from  t_brand where cat_name like '%${類目名稱}%';
select product_code  from  t_tag_product where tag_code = '${標簽編號}';
select product_name,product_code from t_product where brand_code in ('${brandCode}') and cat_code in ('${catCode}') and product_code = '${產(chǎn)品編號}'  and product_code in('${通過tagCode找到productCode}')

但是sql查詢時時有問題迎变,比如:
 1.如果產(chǎn)品編號與${通過tagCode找到productCode} 沒有交集,就不用浪費一次sql查詢飘言,直接在應用層攔截返回氏豌。
 2.如果再增加一張新表sku(sku_code,product_code),同時更新接口的需求為:
支持通過品牌名稱热凹,類目名稱,產(chǎn)品編號泪电,標簽編號般妙,sku編號查詢產(chǎn)品信息。其sql也會越來越復雜相速。

select product_name,product_code from t_product
where brand_code in ('${brandCode}') 
and cat_code in ('${catCode}') 
and product_code = '${產(chǎn)品編號}'  
and product_code in('${通過tagCode找到productCode}') 
and product_code in('${通過skuCode找到productCode}')

很明顯碟渺,需要一個在應用層對productCode進行合并,并過濾無效的productCode的工具突诬。
這樣的工具苫拍,需要解決幾個問題:
 1.將t_product設(shè)為主表,因為最終接口返回的產(chǎn)品信息旺隙,其他表設(shè)置為輔助表绒极,用于輔助查詢。
 2.判斷用戶傳遞的輔助字段蔬捷,這些條件能否查詢到productCode垄提,并將合并為supportProductCodes。
 3.處理masterProductCode與supportProductCodes的關(guān)系周拐,判斷什么時候應該攔截sql铡俐,什么時候應該合并。

有了這個工具后妥粟,sql再次得到簡化

select brand_code from  t_brand where brand_name like '%xx%';
select cat_code  from  t_brand where cat_name like '%xx%';
select product_code  from  t_tag_product where tag_code = 'power';
select product_code  from t_sku where sku_code = '{sku編號}'

select product_name,product_code from t_product where brand_code in ('brandcode') and cat_code in ('cat_code') and and product_code in('{合并后的productCode}')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末审丘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子勾给,更是在濱河造成了極大的恐慌滩报,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锦秒,死亡現(xiàn)場離奇詭異露泊,居然都是意外死亡,警方通過查閱死者的電腦和手機旅择,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門惭笑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事沉噩∞嘧冢” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵川蒙,是天一觀的道長蚜厉。 經(jīng)常有香客問我,道長畜眨,這世上最難降的妖魔是什么昼牛? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮康聂,結(jié)果婚禮上贰健,老公的妹妹穿的比我還像新娘。我一直安慰自己恬汁,他們只是感情好伶椿,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著氓侧,像睡著了一般脊另。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上约巷,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天偎痛,我揣著相機與錄音,去河邊找鬼载庭。 笑死看彼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的囚聚。 我是一名探鬼主播靖榕,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼顽铸!你這毒婦竟也來了茁计?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤谓松,失蹤者是張志新(化名)和其女友劉穎星压,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鬼譬,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡娜膘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了优质。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竣贪。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡军洼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出演怎,到底是詐尸還是另有隱情匕争,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布爷耀,位于F島的核電站甘桑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏歹叮。R本人自食惡果不足惜跑杭,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咆耿。 院中可真熱鬧艘蹋,春花似錦、人聲如沸票灰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屑迂。三九已至,卻和暖如春冯键,著一層夾襖步出監(jiān)牢的瞬間惹盼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工惫确, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留手报,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓改化,卻偏偏與公主長得像掩蛤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子陈肛,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容