MySql 大量記錄分表問題

來源:互聯網
上載者:User
關鍵字 php mysql
背景描述:資料庫使用的MySql,項目中有個裝置狀態記錄表,就是記錄裝置在某個時間下的各屬性狀態值。 系統下所有的裝置狀態記錄都會插入該表

問題描述:現在情況是裝置有很多,每天就會插入很多條記錄。現在提供按裝置、按時間區間查詢記錄。現在表的資料較多,查詢起來速度較慢。
1.改如何最佳化呢?
2.網上看可以分表,現在打算按時間分表,那麼分表後如何按裝置、按時間查詢資料呢?

回複內容:

背景描述:資料庫使用的MySql,項目中有個裝置狀態記錄表,就是記錄裝置在某個時間下的各屬性狀態值。系統下所有的裝置狀態記錄都會插入該表

問題描述:現在情況是裝置有很多,每天就會插入很多條記錄。現在提供按裝置、按時間區間查詢記錄。現在表的資料較多,查詢起來速度較慢。
1.改如何最佳化呢?
2.網上看可以分表,現在打算按時間分表,那麼分表後如何按裝置、按時間查詢資料呢?

一定要結合業務需求!一定要結合業務需求!一定要結合業務需求!

  1. 假設你沒有做索引,建議做個索引

  2. 舉例:假設你的商務邏輯大部分只查詢最近的裝置狀態記錄,那麼老的資料你單獨一張表,或者每月每年之類的一張表,取決於你資料大小

如果真需要按時間來分表的話,比如按每月來分的話,可以把表名設定為如201601,201602,...
再把每個表裡的裝置類型的欄位(假設欄位名為platform)設定索引,查詢的大致思路可以這樣:

$date = $_POST['date']; //查詢的時間,需處理為與表名規則一致$table = $date;$platform = $_POST['platform']; //查詢的裝置類型$where = "`platfrom`='$platform'";$query = "select * from $table $where";

也可以不用分表。mysql5.5之後可以嘗試下分區,按月分區或按年分區都可以。

你這查詢情況的話,可以分表;因為查詢條件有日期,所以按照日期分表查起來肯定不行(可能產生要在多個表裡查詢的情況),考慮到還有按照裝置來查詢;可以直接按照裝置(號)來分表,比如裝置的id,一萬個裝置的資料放入同一個表,或者一千個裝置放一個表,也就是說:裝置號/10000 結果整數部分一樣的一個表,查詢的時候就先根據擷取表名,然後在那個表裡查詢符合日期的範圍的結果

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.