4年碼齡老學(xué)員分享:千萬級數(shù)據(jù)庫查詢需要注意什么
知了堂學(xué)習(xí)社區(qū)從2016年運營至今,培養(yǎng)了10000+學(xué)員入職到IT行業(yè)領(lǐng)域的各個企業(yè),從本周開始我們也增加了學(xué)員技術(shù)分享專欄,學(xué)員將自己在一線的開發(fā)經(jīng)驗分享給我們正在學(xué)習(xí)或者已經(jīng)工作了的知了學(xué)員。
本周分享嘉賓:小墨魚
班級:知了堂Java2班學(xué)員入職:北京****公司(專注金融領(lǐng)域開發(fā))
崗位:Java開發(fā)
碼齡:4年
背景
系統(tǒng)交易量與日俱增。目前負(fù)責(zé)系統(tǒng),數(shù)據(jù)庫單表存放的數(shù)據(jù)量越來越大,目前已是百萬級。查詢速度變慢,所以在思考,與同事交流,網(wǎng)上找相應(yīng)問題需要注意的風(fēng)險,以及后續(xù)解決方案。
01.千萬級數(shù)據(jù)庫查詢需要注意什么
1、建立索引(where,order by)。
2、避免在where字句中,進(jìn)行null值判斷,導(dǎo)致引擎放棄使用索引,進(jìn)行全表掃描。
3、索引提高了查詢效率,但是降低了insert和update效率,所以不是越多越好。
4、數(shù)字,不要涉及為字符型,會降低查詢連接性能。比較字符串,需要比較每一個,數(shù)字只需要比較一次。
5、頻繁和刪除臨時表,會增加系統(tǒng)表資源的消耗。
6、如果使用了臨時表,最后先顯示存儲,先truncate table 再 drop table。
7、!= 和<>,or,以及在where 后面使用表達(dá)式,使用參數(shù),都會導(dǎo)致全表掃描。

02.千萬級數(shù)據(jù)解決方案
1、將歷史數(shù)據(jù)進(jìn)行遷移
如果系統(tǒng)運行穩(wěn)定,在固定時間內(nèi)做歷史數(shù)據(jù)遷移,我認(rèn)為是一個挺有效的解決方案
2、分表方案
(1)一是根據(jù)自增主鍵進(jìn)行哈希取模,將數(shù)據(jù)均分到n張表中;該方案最簡單,且最合適,拆分后數(shù)據(jù)分布均勻。
(2)二是無自增主鍵,選取的分表id由特定的方式生成,則需先確定分表id生成邏輯,根據(jù)該邏輯確定取模計算的邏輯,以保證數(shù)據(jù)均分。
好了,本次分享就到這里了,千萬級數(shù)據(jù)庫查詢需要注意的點你get到了嗎?