mysql分表技術(學習心得)

來源:互聯網
上載者:User

標籤:

(最近在學習mysql最佳化的一些問題,以下為個人一些收穫,如有不足,敬請提出!)

 

概述:當一個表的資料很大,比如200G,這時太大,我們只靠索引也不好使了,這時我們需要分表和分區處理。分表有兩種形式(水平分表和垂直分表)。

一、水平分表

  核心思想:把一個大表,分割N個小表,小表和大表結構一樣,只是把資料分散到不同的表中。

 

  1.1 簡單例子:比如說是通過ID直接登入(例如QQ號),可以直接使用下面的例子

    

    每次登入驗證的時候只要把傳過來的Id除3模數,根據模可以找到對應的表,然後再去對應的表做查詢操作,以下為php的相關操作,註冊以及登入。

    register.php

      

 1 <?php 2     //接收參數 3     //測試的參數有:Pwd,Name, Email 4     extract($_POST); 5  6     //檢查是否為空白 7     if(empty($Pwd) || empty($Name) || empty($Email)){ 8         die(‘參數不可為空!‘); 9     }10 11     //串連資料庫12     $link = mysql_connect(‘127.0.0.1:3306‘,‘root‘, ‘root‘);13     if(!$link){14         die(‘資料庫連接失敗!‘);15     }16 17     //選擇資料庫:這個資料庫有:uuid表(產生Id的表)、User0表(存放模為0的使用者資訊)、User1表(存放模為1的使用者資訊)和User2表(存放模為2的使用者資訊)18     mysql_select_db(‘test‘);19 20     $sql = ‘INSERT INTO uuid VALUES(null)‘;21     if(mysql_query($sql, $link)){22         //擷取剛剛插入的Id23         $id = mysql_insert_id();24 25         //根據 Id%3 來確定該新使用者存放的表26         $table_name = ‘User‘.$Id%3;27 28         $pwd = md5($Pwd);29         $sql = "INSERT INTO $table_name VALUES($id, $Name, $pwd, $Email )";30 31         if(mysql_query($sql, $link)){32             echo ‘註冊成功!‘;33         }else{34             echo ‘註冊失敗!‘;35         }36     }
register.php

 

    login.php

      

 1 <?php 2     header("Content-Type:text/html;charset:utf-8"); 3      4     //接收參數:Id, Pwd 5     extract($_POST); 6  7     //判斷是否為空白 8     if(empty($Id) || empty($Pwd)){ 9         die(‘參數不可為空!‘);10     }11 12     //串連資料庫13     $link = mysql_connect(‘127.0.0.1:3306‘, ‘root‘, ‘root‘);14     if(!$link){15         die(‘串連失敗!‘);16     }17 18     //選擇資料庫19     mysql_select_db(‘test‘);20 21     $table_name = ‘User‘.$Id%3;22     $sql = "SELECT * FROM $table_name WHERE Id = $Id";23     $rst = mysql_query($sql, $link);24 25     if($row = mysql_fetch_assoc($rst)){26         $db_pwd = $row[‘Pwd‘];27         28         if($db_pwd == md5($Pwd)){29             echo ‘登入成功!‘;30         }else{31             echo ‘使用者名稱或者密碼錯誤!‘;32         }33     }else{34         echo ‘Id錯誤!‘;35     }
login.php

 

 

  1.1 通過郵箱登入,通過郵箱對錶進行分割

    

    郵箱基本原理都是和Id差不多,就是要通過一個演算法把md5字串轉成十進位的數,然後再模數,以下為把十六進位的md5字串轉成十進位的函數。

    

    

    

 

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.