婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 為什么說MySQL單表數據不要超過500萬行

為什么說MySQL單表數據不要超過500萬行

熱門標簽:美國反騷擾電話機器人 400電話可以免費申請嗎 怎么在地圖標注位置生成圖片 銅陵防封電銷卡 騰訊地圖標注提升 真人語音電話機器人 福建外呼系統(tǒng)定制化 悟空科技電話機器人 電銷卡外呼系統(tǒng)供應商

今天,探討一個有趣的話題:MySQL 單表數據達到多少時才需要考慮分庫分表?有人說 2000 萬行,也有人說 500 萬行。那么,你覺得這個數值多少才合適呢?

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

再后來,阿里巴巴《Java 開發(fā)手冊》提出單表行數超過 500 萬行或者單表容量超過 2GB,才推薦進行分庫分表。對此,有阿里的黃金鐵律支撐,所以,很多人設計大數據存儲時,多會以此為標準,進行分表操作。

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

事實上,這個數值和實際記錄的條數無關,而與 MySQL 的配置以及機器的硬件有關。因為,MySQL 為了提高性能,會將表的索引裝載到內存中。InnoDB buffer size 足夠的情況下,其能完成全加載進內存,查詢不會有問題。但是,當單表數據庫到達某個量級的上限時,導致內存無法存儲其索引,使得之后的 SQL 查詢會產生磁盤 IO,從而導致性能下降。當然,這個還有具體的表結構的設計有關,最終導致的問題都是內存限制。這里,增加硬件配置,可能會帶來立竿見影的性能提升哈。

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

我們再來看一下關于SQL書寫的一些注意點,會給大家?guī)韼椭?/p>

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

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

標簽:湖南 烏海 云浮 武威 白銀 湖北 聊城 臨汾

巨人網絡通訊聲明:本文標題《為什么說MySQL單表數據不要超過500萬行》,本文關鍵詞  為什么,說,MySQL,單表,數據,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《為什么說MySQL單表數據不要超過500萬行》相關的同類信息!
  • 本頁收集關于為什么說MySQL單表數據不要超過500萬行的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 绥芬河市| 巴林右旗| 桃源县| 老河口市| 磐石市| 贞丰县| 罗定市| 贞丰县| 姚安县| 泽库县| 铁岭县| 克什克腾旗| 芒康县| 洛川县| 桑植县| 方城县| 元谋县| 澄江县| 青龙| 积石山| 永春县| 米易县| 津市市| 长寿区| 格尔木市| 肃南| 蓬溪县| 太和县| 卢龙县| 嘉荫县| 曲松县| 怀宁县| 霸州市| 马龙县| 彭山县| 宁德市| 肃南| 蒲江县| 泸定县| 巴塘县| 宜阳县|