問題:MySQL單表最大記錄數(shù)不能超過多少?

以前沒有想過MySQL數(shù)據(jù)庫的單表最大行數(shù),直到最近interview時(shí)被問到c語言中int類型的最大值是多少時(shí)才想到Mysql單表最大行數(shù)的問題。
一開始被問到C語言中int類型的最大值有點(diǎn)懵逼,一般這種問題都是在校招時(shí)候會被問到,對于工作多年的人不會問這個(gè)問題。被問到這個(gè)問題的時(shí)候,大腦中思考的不是int類型最大值到底是多少?而是為什么這個(gè)問題很經(jīng)典,經(jīng)常被問,了解這個(gè)東西能用到什么地方呢?于是很快想到了MySql單表的最大記錄數(shù)是多少,因?yàn)楸淼膇d一般是自增長的int類型。
MySQL單表最大記錄數(shù)超過多少時(shí)性能會嚴(yán)重下降?
曾經(jīng)在中國互聯(lián)網(wǎng)技術(shù)圈廣為流傳著這么一個(gè)說法:MySQL 單表數(shù)據(jù)量大于 2000 萬行,性能會明顯下降。事實(shí)上,這個(gè)傳聞?chuàng)f最早起源于百度。具體情況大概是這樣的,當(dāng)年的 DBA 測試 MySQL性能時(shí)發(fā)現(xiàn),當(dāng)單表的量在 2000 萬行量級的時(shí)候,SQL 操作的性能急劇下降,因此,結(jié)論由此而來。然后又據(jù)說百度的工程師流動到業(yè)界的其它公司,也帶去了這個(gè)信息,所以,就在業(yè)界流傳開這么一個(gè)說法。
再后來,阿里巴巴《Java 開發(fā)手冊》提出單表行數(shù)超過 500 萬行或者單表容量超過 2GB,才推薦進(jìn)行分庫分表。對此,有阿里的黃金鐵律支撐,所以,很多人設(shè)計(jì)大數(shù)據(jù)存儲時(shí),多會以此為標(biāo)準(zhǔn),進(jìn)行分表操作。

那么,你覺得這個(gè)數(shù)值多少才合適呢?為什么不是 300 萬行,或者是 800 萬行,而是 500 萬行?也許你會說這個(gè)可能就是阿里的最佳實(shí)戰(zhàn)的數(shù)值吧?那么,問題又來了,這個(gè)數(shù)值是如何評估出來的呢?稍等片刻,請你小小思考一會兒。

事實(shí)上,這個(gè)數(shù)值和實(shí)際記錄的條數(shù)無關(guān),而與 MySQL 的配置以及機(jī)器的硬件有關(guān)。因?yàn)椋琈ySQL 為了提高性能,會將表的索引裝載到內(nèi)存中。InnoDB buffer size 足夠的情況下,其能完成全加載進(jìn)內(nèi)存,查詢不會有問題。但是,當(dāng)單表數(shù)據(jù)庫到達(dá)某個(gè)量級的上限時(shí),導(dǎo)致內(nèi)存無法存儲其索引,使得之后的 SQL 查詢會產(chǎn)生磁盤 IO,從而導(dǎo)致性能下降。當(dāng)然,這個(gè)還有具體的表結(jié)構(gòu)的設(shè)計(jì)有關(guān),最終導(dǎo)致的問題都是內(nèi)存限制。這里,增加硬件配置,可能會帶來立竿見影的性能提升哈。
那么,我對于分庫分表的觀點(diǎn)是,需要結(jié)合實(shí)際需求,不宜過度設(shè)計(jì),在項(xiàng)目一開始不采用分庫與分表設(shè)計(jì),而是隨著業(yè)務(wù)的增長,在無法繼續(xù)優(yōu)化的情況下,再考慮分庫與分表提高系統(tǒng)的性能。
對此,阿里巴巴《Java 開發(fā)手冊》補(bǔ)充到:如果預(yù)計(jì)三年后的數(shù)據(jù)量根本達(dá)不到這個(gè)級別,請不要在創(chuàng)建表時(shí)就分庫分表。那么,回到一開始的問題,你覺得這個(gè)數(shù)值多少才合適呢?我的建議是,根據(jù)自身的機(jī)器的情況綜合評估,如果心里沒有標(biāo)準(zhǔn),那么暫時(shí)以 500 萬行作為一個(gè)統(tǒng)一的標(biāo)準(zhǔn),相對而言算是一個(gè)比較折中的數(shù)值。
mysql bigint auto_increment 自增長值的最大數(shù)量
bigint
有符號值:-9223372036854775808 到9223373036854775807(- 2 ^ 63 到 2 ^ 63-1)
無符號值:0到18446744073709551615(0到2^64 – 1)
創(chuàng)建表時(shí) 自增長字段 選擇無符號bigint,那么自增長最大值是 18446744073709551615
一秒增加的記錄條數(shù) 大約多少年后才會用完

作者:測試狗一枚
原文鏈接:https://blog.csdn.net/sanmi8276/article/details/107222138
來源:csdn
技術(shù)github學(xué)習(xí)地址:https://github.com/codeGoogler/JavaCodeHub
程序員編程書籍:https://github.com/codeGoogler/ProgramBooks
關(guān)于如何學(xué)習(xí)Java,一方面需要不斷的去學(xué)習(xí),把基礎(chǔ)知識學(xué)扎實(shí),另一方面也要認(rèn)識到j(luò)ava的學(xué)習(xí)不能僅僅靠理論,更多的是靠實(shí)操,所以要多練習(xí)多做項(xiàng)目,在實(shí)踐中學(xué)習(xí)才是最好的學(xué)習(xí)方法。很多人剛開始不知道怎么去學(xué)習(xí),這里我將一些重要的技術(shù)文章整理到了github上開源項(xiàng)目上,希望能給大家?guī)硪恍椭?項(xiàng)目是:JavaCodeHub

另外,還整理了一些針對于程序員的編程書籍項(xiàng)目,都放到了github上面,項(xiàng)目為:ProgramBooks 需要的話可以自取。地址:https://github.com/codeGoogler/ProgramBooks
如果github訪問太慢?我同時(shí)也把去放到了碼云上面ProgramBooks
最后,照舊安利一波我們的gzh:「終端研發(fā)部」,目前每天都會推薦一篇優(yōu)質(zhì)的技術(shù)相關(guān)的文章,主要分享java相關(guān)的技術(shù)與面試技巧,我們的目標(biāo)是: 知道是什么,為什么,打好基礎(chǔ),做好每一點(diǎn)!這個(gè)主創(chuàng)技術(shù)公眾號超級值得大家關(guān)注。
關(guān)于如何學(xué)習(xí)Java,一方面需要不斷的去學(xué)習(xí),把基礎(chǔ)知識學(xué)扎實(shí),另一方面也要認(rèn)識到j(luò)ava的學(xué)習(xí)不能僅僅靠理論,更多的是靠實(shí)操,所以要多練習(xí)多做項(xiàng)目,在實(shí)踐中學(xué)習(xí)才是最好的學(xué)習(xí)方法。很多人剛開始不知道怎么去學(xué)習(xí),這里我和大部分都來自好朋友整理的一份《JavaCodeHub面試突擊》,里面包含的內(nèi)容實(shí)在是太全面了,真的很能考察出一名應(yīng)聘者的成色。
我是終端研發(fā)部的小于哥
@終端研發(fā)部
面試過很多很多應(yīng)聘者,說實(shí)話, 現(xiàn)在面試要求可真高,雖然工作擰螺絲,但面試還是造火箭的。很多東西我們不光要會用,也要懂其原理。在戰(zhàn)術(shù)上一定要重視,方能百戰(zhàn)不殆!如果有幫助,歡迎點(diǎn)贊!