MySQL兩千萬資料最佳化&遷移

來源:互聯網
上載者:User

標籤:

最近有一張2000W條記錄的資料表需要最佳化和遷移。2000W資料對於MySQL來說很尷尬,因為合理的建立索引速度還是挺快的,再怎麼最佳化速度也得不到多大提升。不過這些資料有大量的冗餘欄位和錯誤資訊,極不方便做統計和分析。所以我需要建立一張新表,把舊錶中的資料一條一條取出來最佳化後放回新表;

一. 清除冗餘資料,最佳化欄位結構

2000W資料中,能作為查詢條件的欄位我們是預知的。所以將這部分資料單獨建立新的欄位,對於有規則的資料合理改變欄位結構,比如身份證就是varchar(18)。對於不重要的資料我們合并後存在一個結構為text的欄位。

對於一些有關聯的資料我們需要計算,常見的比如身份證種能擷取到準確的性別,出生地、生日、年齡。

二. 資料移轉

我們從資料庫中取出一條舊資料,再通過計算處理後得到想要的新資料(騰雲科技ty300.com),最後將新資料插入新表。不過在擷取新資料時遇到如下問題。

1. 資料量太大,無法一次擷取(2000W資料扔到記憶體挺可怕的);

我們可以通過MySQL的limit文法分批擷取。比如每次擷取50000,SQL語句如下:

select * from table_name limit 15000000,50000;

通過這種方法能解決資料量太大的問題,但是隨著limit的第一個參數越來越大,查詢速度會慢的嚇人(上面這條SQL執行會花35秒)。時間就是生命,於是我們開始最佳化SQL語句,最佳化後變成下面這樣:

稿源:勤快學QKXue.NET

完整版MySQL兩千萬資料最佳化&遷移介紹

MySQL兩千萬資料最佳化&遷移

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.