最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2019年06月26日 09:10:17   作者:qianfeng_dashuju  
在本篇文章里小編給大家整理了一篇關于為什么說MySQL單表數據不要超過500萬行的相關內容,有興趣的朋友們閱讀下吧。

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

曾經在中國互聯(lián)網技術圈廣為流傳著這么一個說法:MySQL 單表數據量大于 2000 萬行,性能會明顯下降。事實上,這個傳聞?chuàng)f最早起源于百度。具體情況大概是這樣的,當年的 DBA 測試 MySQL性能時發(fā)現(xiàn),當單表的量在 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ā)器,在應用程序實現(xiàn)
  • 避免%xxx式查詢
  • 少用JOIN
  • 使用同類型進行比較,比如用'123'和'123'比,123和123比
  • 盡量避免在WHERE子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描
  • 對于連續(xù)數值,使用BETWEEN不用IN:SELECT id FROM t WHERE num BETWEEN 1 AND 5
  • 列表數據不要拿全表,要使用LIMIT來分頁,每頁數量也不要太大

相關文章

  • MySQL性能突然下降的原因

    MySQL性能突然下降的原因

    這篇文章主要介紹了MySQL性能突然下降的原因,幫助大家更好的了解和維護數據庫,感興趣的朋友可以了解下
    2020-10-10
  • mysql建表常用sql語句個人經驗分享

    mysql建表常用sql語句個人經驗分享

    熟悉一些常用的建表語句可以提升你建表的速度效率,本文整理了一些,個人感覺還不錯,希望對大家有所幫助
    2014-01-01
  • 在MySQL中修改密碼及訪問限制的設置方法詳解

    在MySQL中修改密碼及訪問限制的設置方法詳解

    MySQL是一個真正的多用戶、多線程SQL數據庫服務器。MySQL是以一個客戶機/服務器結構的實現(xiàn),它由一個服務器守護程序mysqld和很多不同的客戶程序和庫組成。
    2007-03-03
  • Navicat配置mysql數據庫用戶權限問題

    Navicat配置mysql數據庫用戶權限問題

    這篇文章主要介紹了Navicat配置mysql數據庫用戶權限問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • windows10安裝mysql5.7.17教程

    windows10安裝mysql5.7.17教程

    windows10安裝mysql5.7.17是這樣安裝的嗎?這篇文章主要為大家詳細介紹了win10下mysql5.7.17安裝配置方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 如何正確、安全地關閉MySQL

    如何正確、安全地關閉MySQL

    當需要停止或關閉MySQL實例時,很多人并不清楚如何做到正確、安全地關閉MySQL,會對數據的安全性和穩(wěn)定性造成很大的威脅,本文將從多個方面詳細闡述如何正確關閉MySQL,包括關閉MySQL的基本方法、關閉MySQL前的準備工作、優(yōu)雅地關閉MySQL以及遇到MySQL無法正常關閉的情況
    2023-09-09
  • Mysql分區(qū)表的管理與維護

    Mysql分區(qū)表的管理與維護

    改變一個表的分區(qū)方案只需使用alter table 加 partition_options 子句就可以了。這篇文章主要介紹了Mysql分區(qū)表的管理與維護,非常不錯,感興趣的朋友一起學習吧,需要的朋友可以參考下
    2016-08-08
  • 如何查看連接MYSQL數據庫的IP信息

    如何查看連接MYSQL數據庫的IP信息

    這篇文章介紹了三種查看連接MYSQL數據庫的IP信息方法,方法簡單實用,需要的朋友可以參考下
    2015-07-07
  • mysql中int(3)和int(10)的數值范圍是否相同

    mysql中int(3)和int(10)的數值范圍是否相同

    依稀還記得有次面試,有面試官問我int(10)與int(11)有什么區(qū)別,當時覺得就是長度的區(qū)別吧,后來發(fā)現(xiàn)事情不是這么簡單,這篇文章主要給大家介紹了關于mysql中int(3)和int(10)的數值范圍是否相同的相關資料
    2021-10-10
  • MongoDB日期查詢操作圖文詳解

    MongoDB日期查詢操作圖文詳解

    MongoDB中按日期查詢是一種常見的查詢操作,而按日期查詢也是開發(fā)人員在MongoDB工作中最常遇到的查詢任務之一,這篇文章主要給大家介紹了關于MongoDB日期查詢操作的相關資料,需要的朋友可以參考下
    2024-02-02

最新評論

定襄县| 大余县| 横山县| 泉州市| 从化市| 青州市| 太谷县| 聊城市| 屏东县| 阿荣旗| 固安县| 安平县| 南宁市| 丰都县| 留坝县| 海淀区| 六安市| 塔河县| 曲阜市| 福建省| 徐州市| 定安县| 武平县| 安陆市| 城口县| 汾阳市| 建水县| 中牟县| 峨山| 刚察县| 太保市| 武山县| 四会市| 高密市| 扶绥县| 甘孜县| 阿拉善右旗| 芷江| 神农架林区| 大姚县| 平江县|