欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

為什么說MySQL單表數(shù)據(jù)不要超過500萬行

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

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

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

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

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

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

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

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

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

  • 使用limit對查詢結(jié)果的記錄進行限定
  • 避免select *,將需要查找的字段列出來
  • 使用連接(join)來代替子查詢
  • 拆分大的delete或insert語句
  • 可通過開啟慢查詢?nèi)罩緛碚页鲚^慢的SQL
  • 不做列運算:SELECT id WHERE age + 1 = 10,任何對列的操作都將導致表掃描,它包括數(shù)據(jù)庫教程函數(shù)、計算表達式等等,查詢時要盡可能將操作移至等號右邊
  • sql語句盡可能簡單:一條sql只能在一個cpu運算;大語句拆小語句,減少鎖時間;一條大sql可以堵死整個庫
  • OR改寫成IN:OR的效率是n級別,IN的效率是log(n)級別,in的個數(shù)建議控制在200以內(nèi)
  • 不用函數(shù)和觸發(fā)器,在應(yīng)用程序?qū)崿F(xiàn)
  • 避免%xxx式查詢
  • 少用JOIN
  • 使用同類型進行比較,比如用'123'和'123'比,123和123比
  • 盡量避免在WHERE子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描
  • 對于連續(xù)數(shù)值,使用BETWEEN不用IN:SELECT id FROM t WHERE num BETWEEN 1 AND 5
  • 列表數(shù)據(jù)不要拿全表,要使用LIMIT來分頁,每頁數(shù)量也不要太大

相關(guān)文章

  • MySQL 隨機函數(shù)獲取數(shù)據(jù)速度和效率分析

    MySQL 隨機函數(shù)獲取數(shù)據(jù)速度和效率分析

    最近做項目,需要做一個從mysql數(shù)據(jù)庫中隨機取幾條數(shù)據(jù)出來??偹苤琽rder by rand 會死人的。。因為本人對大數(shù)據(jù)量方面的只是了解的很少,無解,去找百度老師。。搜索結(jié)果千篇一律。特發(fā)到這里來,供大家學習,需要的朋友可以參考下
    2016-11-11
  • MySQL性能優(yōu)化 出題業(yè)務(wù)SQL優(yōu)化

    MySQL性能優(yōu)化 出題業(yè)務(wù)SQL優(yōu)化

    根據(jù)用戶的作答結(jié)果出練習卷,題目的優(yōu)先級為:未做過的題目>只做錯的題目>做錯又做對的題目>只做對的題目。
    2010-08-08
  • Mysql 實現(xiàn)向上遞歸查找父節(jié)點并返回樹結(jié)構(gòu)的示例代碼

    Mysql 實現(xiàn)向上遞歸查找父節(jié)點并返回樹結(jié)構(gòu)的示例代碼

    通過mysql 8.0以下版本實現(xiàn),一個人多角色id,一個角色對應(yīng)某個節(jié)點menu_id,根節(jié)點的父節(jié)點存儲為NULL, 向上遞歸查找父節(jié)點并返回樹結(jié)構(gòu),今天通過本文給大家介紹Mysql遞歸查找父節(jié)點并返回樹結(jié)構(gòu),感興趣的朋友一起看看吧
    2022-09-09
  • MYSQL根據(jù)JSON列將一行拆為多行的操作方法

    MYSQL根據(jù)JSON列將一行拆為多行的操作方法

    這篇文章主要介紹了MYSQL根據(jù)JSON列將一行拆為多行的操作方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • MySQL中符號@的作用

    MySQL中符號@的作用

    本文主要介紹了MySQL中符號@的作用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • 安全快速修改Mysql數(shù)據(jù)庫名的5種方法

    安全快速修改Mysql數(shù)據(jù)庫名的5種方法

    mysql中如何重命名數(shù)據(jù)庫?這篇文章主要介紹了安全快速修改Mysql數(shù)據(jù)庫名的5種方法,需要的朋友可以參考下
    2014-04-04
  • MySQL索引設(shè)計原則深入分析講解

    MySQL索引設(shè)計原則深入分析講解

    為了使索引的使用效率更高,在創(chuàng)建索引時,必須考慮在哪些字段上創(chuàng)建索引和創(chuàng)建什么類型的索引。索引設(shè)計不合理或者缺少索引都會對數(shù)據(jù)庫和應(yīng)用程序的性能造成障礙。高效的索引對于獲得良好的性能非常重要。設(shè)計索引時,應(yīng)該考慮相應(yīng)準則
    2023-01-01
  • 同時運行多個MySQL服務(wù)器的方法

    同時運行多個MySQL服務(wù)器的方法

    在同一臺機器上運行多個有些情況下你可能想要在同一臺機器上運行多個服務(wù)器。例如,你可能想要測試一個新的MySQL版本而讓你現(xiàn)有生產(chǎn)系統(tǒng)的設(shè)置不受到干擾, 或你可能是想要為不同的客戶提供獨立的MySQL安裝一個因特網(wǎng)服務(wù)供應(yīng)商。
    2008-05-05
  • mysql 實現(xiàn)遷移數(shù)據(jù)庫到另一臺服務(wù)器

    mysql 實現(xiàn)遷移數(shù)據(jù)庫到另一臺服務(wù)器

    這篇文章主要介紹了mysql 實現(xiàn)遷移數(shù)據(jù)庫到另一臺服務(wù)器中,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • MySQL使用binlog日志做數(shù)據(jù)恢復(fù)的實現(xiàn)

    MySQL使用binlog日志做數(shù)據(jù)恢復(fù)的實現(xiàn)

    這篇文章主要介紹了MySQL使用binlog日志做數(shù)據(jù)恢復(fù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03

最新評論