国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

MySQL性能優(yōu)化出題業(yè)務(wù)SQL優(yōu)化_MySQL

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 19:04:29
文檔

MySQL性能優(yōu)化出題業(yè)務(wù)SQL優(yōu)化_MySQL

MySQL性能優(yōu)化出題業(yè)務(wù)SQL優(yōu)化_MySQL:bitsCN.com 先簡單介紹一下項目背景。這是一個在線考試練習(xí)平臺,數(shù)據(jù)庫使用MySQL,表結(jié)構(gòu)如圖所示:Question是存儲題目的表,數(shù)據(jù)量在3萬左右。AnswerResult表是存儲用戶作答結(jié)果的表,分表之后單表記錄大概在300萬-400萬。需求:根據(jù)用戶的作答結(jié)果出練
推薦度:
導(dǎo)讀MySQL性能優(yōu)化出題業(yè)務(wù)SQL優(yōu)化_MySQL:bitsCN.com 先簡單介紹一下項目背景。這是一個在線考試練習(xí)平臺,數(shù)據(jù)庫使用MySQL,表結(jié)構(gòu)如圖所示:Question是存儲題目的表,數(shù)據(jù)量在3萬左右。AnswerResult表是存儲用戶作答結(jié)果的表,分表之后單表記錄大概在300萬-400萬。需求:根據(jù)用戶的作答結(jié)果出練

bitsCN.com

先簡單介紹一下項目背景。這是一個在線考試練習(xí)平臺,數(shù)據(jù)庫使用MySQL,表結(jié)構(gòu)如圖所示:

Question是存儲題目的表,數(shù)據(jù)量在3萬左右。AnswerResult表是存儲用戶作答結(jié)果的表,分表之后單表記錄大概在300萬-400萬。

需求:根據(jù)用戶的作答結(jié)果出練習(xí)卷,題目的優(yōu)先級為:未做過的題目>只做錯的題目>做錯又做對的題目>只做對的題目。

在“做錯又做對的題目”中,會按錯誤次數(shù)和正確次數(shù)的比例進行權(quán)重計算,比如:A、做錯10次,做對100次;B、做錯10次,做對20次。這時B被選中出給用戶練習(xí)的概率就大。

備注:AnswerResult表中不存在QuestionId的記錄,則代表該題沒有做過。

之前使用的方法:

  SELECT Question.題目標(biāo)識,IFNULL((0-正確次數(shù))/(正確次數(shù)+錯誤次數(shù)),1) AS 權(quán)重 FROM Question

  LEFT JOIN AnswerResult ON AnswerResult.題目標(biāo)識 = Question.題目標(biāo)識

  WHERE 用戶標(biāo)識={UserId}

說明:IFNULL((0-正確次數(shù))/(正確次數(shù)+錯誤次數(shù)),1)這個函數(shù)式分2部分,

公式:(0-正確次數(shù))/(正確次數(shù)+錯誤次數(shù))得到題目的權(quán)重,這個區(qū)間為[0,-1],0表示只做錯的題目,-1表示只做對的題目。IFNULL(value,1)則將未做過的題目權(quán)重設(shè)置為1,根據(jù)這個權(quán)重進行排序列出題目。

由于AnswerResult表是多達300、400百萬的表,所以通過LEFT JOIN進行左連接時,迪卡爾乘積過大,又加上AnswerResult是頻繁讀寫的表,很容易導(dǎo)致這條SQL變成慢查詢。

性能問題被提上日程后,這條SQL語句就變成的優(yōu)化點。

1、IFNULL()這個函數(shù)計算可以調(diào)整成冗余字段。

2、LEFT JOIN的迪卡爾乘積太大,可以調(diào)整為冗余或者使用INNER JOIN以提高查詢速度。

3、根據(jù)需求,其實可以調(diào)整出題策略,不同的情況執(zhí)行不同的SQL,而不需要在同一條SQL中實現(xiàn)。

解決方案針對以上三個點進行調(diào)整。雖然Question表有3萬條數(shù)據(jù),但是出題的場景其實是針對知識點出題,單個知識點題目最多也只有1000題左右,所以獲取未做過的題目時,完全可以使用NOT IN走索引來完成。SQL語句如:

  A:SELECT 題目標(biāo)識 FROM Question WHERE 知識點={KnowledgePointCode} AND 題目標(biāo)識 NOT IN (

    SELECT 題目標(biāo)識 FROM AnswerResult INNER JOIN Question AND Question.知識點={KnowledgePointCode}

    WHERE AnswerResult.用戶標(biāo)識 = {UserId}

  )

針對只做錯的題目出題練習(xí)就簡單了(正確次數(shù) = 0代表只做錯),SQL如:

  B:SELECT 題目標(biāo)識 FROM AnswerResult INNER JOIN Question AND Question.知識點={KnowledgePointCode}

  WHERE AnswerResult.用戶標(biāo)識 = {UserId} AND 正確次數(shù) = 0 ORDER BY 錯誤次數(shù) DESC

若要對做錯、做對或者只做對的題目進行出題,SQL就是這樣的(已經(jīng)對權(quán)重進行冗余=IFNULL((0-正確次數(shù))/(正確次數(shù)+錯誤次數(shù)),1)):

  C:SELECT 題目標(biāo)識 FROM AnswerResult INNER JOIN Question AND Question.知識點={KnowledgePointCode}

  WHERE AnswerResult.用戶標(biāo)識 = {UserId} AND 正確次數(shù) > 0 ORDER BY 權(quán)重 DESC

不足:SQL語句A的查詢速度依然是較慢的,雖然有縮小NOT IN的結(jié)果集,但這里還是有優(yōu)化點。園子里的朋友們能不能給點建議?

有人說JOIN是SQL的性能殺手,我覺得主要還是怎么去使用JOIN,MySQL的索引優(yōu)化相當(dāng)重要,如果JOIN成為性能瓶頸,可以EXPLAIN看看是不是索引沒有建好,并且盡量讓迪卡爾乘積盡量小。使用冗余數(shù)據(jù)避免JOIN,當(dāng)可能變化的冗余數(shù)據(jù)被分表之后,更新這些冗余數(shù)據(jù)就是一件非常頭痛的事了。海量數(shù)據(jù)高并發(fā),確實是一件挺頭痛的事。

望園子里有這方面經(jīng)驗的朋友不吝賜教。謝謝。

bitsCN.com

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

MySQL性能優(yōu)化出題業(yè)務(wù)SQL優(yōu)化_MySQL

MySQL性能優(yōu)化出題業(yè)務(wù)SQL優(yōu)化_MySQL:bitsCN.com 先簡單介紹一下項目背景。這是一個在線考試練習(xí)平臺,數(shù)據(jù)庫使用MySQL,表結(jié)構(gòu)如圖所示:Question是存儲題目的表,數(shù)據(jù)量在3萬左右。AnswerResult表是存儲用戶作答結(jié)果的表,分表之后單表記錄大概在300萬-400萬。需求:根據(jù)用戶的作答結(jié)果出練
推薦度:
標(biāo)簽: 記錄 數(shù)據(jù)庫 sql
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 欧美精 | 日韩欧美中字 | 全免费一级午夜毛片 | 国产欧美日韩精品在线 | 亚洲视频在线免费播放 | 国产精品一区二区综合 | 日韩高清毛片 | 欧美日本道免费二区三区 | 国产欧美在线视频免费 | 亚洲欧美日韩高清中文在线 | 伊人网中文字幕 | 欧美整片第一页 | 欧美日韩精品高清一区二区 | 精品一区二区在线欧美日韩 | 国产成人a∨麻豆精品 | 91国内精品久久久久免费影院 | 日韩 国产 欧美 精品 在线 | 国产在线观看入口 | 日本韩国一区 | 99精品高清视频一区二区 | 成人免费一级毛片在线播放视频 | 成a人片亚洲日本久久 | 国产aⅴ一区二区三区 | 国产在线欧美日韩一区二区 | www.国产精品 | 色接久久 | 成人毛片一区二区三区 | 国产最新在线视频 | 亚洲欧美一区二区三区孕妇 | 高清在线一区二区 | 国产精品系列在线观看 | 91久久九九精品国产综合 | 成人欧美一区二区三区在线 | 日韩精品一区二区三区 在线观看 | 韩日精品视频 | 欧美影欧美影院免费观看视频 | 青草青草伊人精品视频 | 日韩在线视频免费 | 国产最新网站 | 色视频久久 | 国内精品久久久久 |