濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 為什么說(shuō)MySQL單表數(shù)據(jù)不要超過(guò)500萬(wàn)行

為什么說(shuō)MySQL單表數(shù)據(jù)不要超過(guò)500萬(wàn)行

熱門(mén)標(biāo)簽:美國(guó)反騷擾電話機(jī)器人 400電話可以免費(fèi)申請(qǐng)嗎 怎么在地圖標(biāo)注位置生成圖片 銅陵防封電銷(xiāo)卡 騰訊地圖標(biāo)注提升 真人語(yǔ)音電話機(jī)器人 福建外呼系統(tǒng)定制化 悟空科技電話機(jī)器人 電銷(xiāo)卡外呼系統(tǒng)供應(yīng)商

今天,探討一個(gè)有趣的話題:MySQL 單表數(shù)據(jù)達(dá)到多少時(shí)才需要考慮分庫(kù)分表?有人說(shuō) 2000 萬(wàn)行,也有人說(shuō) 500 萬(wàn)行。那么,你覺(jué)得這個(gè)數(shù)值多少才合適呢?

曾經(jīng)在中國(guó)互聯(lián)網(wǎng)技術(shù)圈廣為流傳著這么一個(gè)說(shuō)法:MySQL 單表數(shù)據(jù)量大于 2000 萬(wàn)行,性能會(huì)明顯下降。事實(shí)上,這個(gè)傳聞?chuàng)f(shuō)最早起源于百度。具體情況大概是這樣的,當(dāng)年的 DBA 測(cè)試 MySQL性能時(shí)發(fā)現(xiàn),當(dāng)單表的量在 2000 萬(wàn)行量級(jí)的時(shí)候,SQL 操作的性能急劇下降,因此,結(jié)論由此而來(lái)。然后又據(jù)說(shuō)百度的工程師流動(dòng)到業(yè)界的其它公司,也帶去了這個(gè)信息,所以,就在業(yè)界流傳開(kāi)這么一個(gè)說(shuō)法。

再后來(lái),阿里巴巴《Java 開(kāi)發(fā)手冊(cè)》提出單表行數(shù)超過(guò) 500 萬(wàn)行或者單表容量超過(guò) 2GB,才推薦進(jìn)行分庫(kù)分表。對(duì)此,有阿里的黃金鐵律支撐,所以,很多人設(shè)計(jì)大數(shù)據(jù)存儲(chǔ)時(shí),多會(huì)以此為標(biāo)準(zhǔn),進(jìn)行分表操作。

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

事實(shí)上,這個(gè)數(shù)值和實(shí)際記錄的條數(shù)無(wú)關(guān),而與 MySQL 的配置以及機(jī)器的硬件有關(guān)。因?yàn)?,MySQL 為了提高性能,會(huì)將表的索引裝載到內(nèi)存中。InnoDB buffer size 足夠的情況下,其能完成全加載進(jìn)內(nèi)存,查詢不會(huì)有問(wèn)題。但是,當(dāng)單表數(shù)據(jù)庫(kù)到達(dá)某個(gè)量級(jí)的上限時(shí),導(dǎo)致內(nèi)存無(wú)法存儲(chǔ)其索引,使得之后的 SQL 查詢會(huì)產(chǎn)生磁盤(pán) IO,從而導(dǎo)致性能下降。當(dāng)然,這個(gè)還有具體的表結(jié)構(gòu)的設(shè)計(jì)有關(guān),最終導(dǎo)致的問(wèn)題都是內(nèi)存限制。這里,增加硬件配置,可能會(huì)帶來(lái)立竿見(jiàn)影的性能提升哈。

那么,我對(duì)于分庫(kù)分表的觀點(diǎn)是,需要結(jié)合實(shí)際需求,不宜過(guò)度設(shè)計(jì),在項(xiàng)目一開(kāi)始不采用分庫(kù)與分表設(shè)計(jì),而是隨著業(yè)務(wù)的增長(zhǎng),在無(wú)法繼續(xù)優(yōu)化的情況下,再考慮分庫(kù)與分表提高系統(tǒng)的性能。對(duì)此,阿里巴巴《Java 開(kāi)發(fā)手冊(cè)》補(bǔ)充到:如果預(yù)計(jì)三年后的數(shù)據(jù)量根本達(dá)不到這個(gè)級(jí)別,請(qǐng)不要在創(chuàng)建表時(shí)就分庫(kù)分表。那么,回到一開(kāi)始的問(wèn)題,你覺(jué)得這個(gè)數(shù)值多少才合適呢?我的建議是,根據(jù)自身的機(jī)器的情況綜合評(píng)估,如果心里沒(méi)有標(biāo)準(zhǔn),那么暫時(shí)以 500 萬(wàn)行作為一個(gè)統(tǒng)一的標(biāo)準(zhǔn),相對(duì)而言算是一個(gè)比較折中的數(shù)值。

我們?cè)賮?lái)看一下關(guān)于SQL書(shū)寫(xiě)的一些注意點(diǎn),會(huì)給大家?guī)?lái)幫助

sql的編寫(xiě)需要注意優(yōu)化

  • 使用limit對(duì)查詢結(jié)果的記錄進(jìn)行限定
  • 避免select *,將需要查找的字段列出來(lái)
  • 使用連接(join)來(lái)代替子查詢
  • 拆分大的delete或insert語(yǔ)句
  • 可通過(guò)開(kāi)啟慢查詢?nèi)罩緛?lái)找出較慢的SQL
  • 不做列運(yùn)算:SELECT id WHERE age + 1 = 10,任何對(duì)列的操作都將導(dǎo)致表掃描,它包括數(shù)據(jù)庫(kù)教程函數(shù)、計(jì)算表達(dá)式等等,查詢時(shí)要盡可能將操作移至等號(hào)右邊
  • sql語(yǔ)句盡可能簡(jiǎn)單:一條sql只能在一個(gè)cpu運(yùn)算;大語(yǔ)句拆小語(yǔ)句,減少鎖時(shí)間;一條大sql可以堵死整個(gè)庫(kù)
  • OR改寫(xiě)成IN:OR的效率是n級(jí)別,IN的效率是log(n)級(jí)別,in的個(gè)數(shù)建議控制在200以內(nèi)
  • 不用函數(shù)和觸發(fā)器,在應(yīng)用程序?qū)崿F(xiàn)
  • 避免%xxx式查詢
  • 少用JOIN
  • 使用同類(lèi)型進(jìn)行比較,比如用'123'和'123'比,123和123比
  • 盡量避免在WHERE子句中使用!=或>操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描
  • 對(duì)于連續(xù)數(shù)值,使用BETWEEN不用IN:SELECT id FROM t WHERE num BETWEEN 1 AND 5
  • 列表數(shù)據(jù)不要拿全表,要使用LIMIT來(lái)分頁(yè),每頁(yè)數(shù)量也不要太大
您可能感興趣的文章:
  • PHP使用mysql_fetch_row查詢獲得數(shù)據(jù)行列表的方法
  • 5個(gè)MySQL GUI工具推薦,幫助你進(jìn)行數(shù)據(jù)庫(kù)管理
  • 簡(jiǎn)單了解操作mysql數(shù)據(jù)庫(kù)的命令行神器mycli
  • php使用mysqli和pdo擴(kuò)展,測(cè)試對(duì)比mysql數(shù)據(jù)庫(kù)的執(zhí)行效率完整示例
  • MySQL執(zhí)行update語(yǔ)句和原數(shù)據(jù)相同會(huì)再次執(zhí)行嗎
  • IDEA使用properties配置文件進(jìn)行mysql數(shù)據(jù)庫(kù)連接的教程圖解
  • mysql如何利用binlog進(jìn)行數(shù)據(jù)恢復(fù)詳解
  • MySQL數(shù)據(jù)庫(kù)Event定時(shí)執(zhí)行任務(wù)詳解
  • 解決Windows10下mysql5.5數(shù)據(jù)庫(kù)命令行中文亂碼問(wèn)題
  • Java對(duì)MySQL數(shù)據(jù)庫(kù)進(jìn)行連接、查詢和修改操作方法
  • 詳解MySQL的數(shù)據(jù)行和行溢出機(jī)制

標(biāo)簽:湖南 烏海 云浮 武威 白銀 湖北 聊城 臨汾

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《為什么說(shuō)MySQL單表數(shù)據(jù)不要超過(guò)500萬(wàn)行》,本文關(guān)鍵詞  為什么,說(shuō),MySQL,單表,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《為什么說(shuō)MySQL單表數(shù)據(jù)不要超過(guò)500萬(wàn)行》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于為什么說(shuō)MySQL單表數(shù)據(jù)不要超過(guò)500萬(wàn)行的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    前郭尔| 鹤岗市| 新兴县| 合水县| 灵台县| 安陆市| 凉山| 武功县| 元阳县| 高青县| 聂拉木县| 徐州市| 阿克陶县| 通河县| 海晏县| 乌兰察布市| 云南省| 宝丰县| 陆川县| 布尔津县| 阿巴嘎旗| 婺源县| 枣强县| 利辛县| 三台县| 普格县| 武冈市| 菏泽市| 象山县| 松桃| 吉水县| 石家庄市| 同心县| 浦东新区| 宁强县| 肇东市| 曲水县| 长治县| 白城市| 扶绥县| 云浮市|