亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL單表數據不要超過500萬行的原因是什么

發布時間:2021-07-30 11:18:49 來源:億速云 閱讀:158 作者:小新 欄目:MySQL數據庫

小編給大家分享一下MySQL單表數據不要超過500萬行的原因是什么,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

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

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

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

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

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

我們再來看一下關于SQL書寫的一些注意點,會給大家帶來幫助

sql的編寫需要注意優化

  • 使用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以內

  • 不用函數和觸發器,在應用程序實現

  • 避免%xxx式查詢

  • 少用JOIN

  • 使用同類型進行比較,比如用'123'和'123'比,123和123比

  • 盡量避免在WHERE子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描

  • 對于連續數值,使用BETWEEN不用IN:SELECT id FROM t WHERE num BETWEEN 1 AND 5

  • 列表數據不要拿全表,要使用LIMIT來分頁,每頁數量也不要太大

看完了這篇文章,相信你對“MySQL單表數據不要超過500萬行的原因是什么”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

噶尔县| 齐齐哈尔市| 馆陶县| 双鸭山市| 皮山县| 明水县| 甘洛县| 布尔津县| 浑源县| 库尔勒市| 和平区| 吉木萨尔县| 海宁市| 广平县| 黔东| 板桥市| 高陵县| 县级市| 阿拉善盟| 伽师县| 罗源县| 荆州市| 屏南县| 宝山区| 乌拉特前旗| 大厂| 郑州市| 淮南市| 汕尾市| 崇信县| 西乌珠穆沁旗| 灵武市| 长子县| 揭东县| 九寨沟县| 陵川县| 方正县| 崇左市| 南投县| 海伦市| 新建县|