1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      mysql實現(xiàn)分表的方法

      這篇文章主要介紹MySQL實現(xiàn)分表的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

      站在用戶的角度思考問題,與客戶深入溝通,找到老邊網(wǎng)站設(shè)計與老邊網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋老邊地區(qū)。

      mysql分表的方法:

      1、做mysql集群,例如:利用mysql cluster ,mysql proxy,mysql replication,drdb等等

      有人會問mysql集群,根分表有什么關(guān)系嗎?雖然它不是實際意義上的分表,但是它啟到了分表的作用,做集群的意義是什么呢?為一個數(shù)據(jù)庫減輕負擔(dān),說白了就是減少sql排隊隊列中的sql的數(shù)量。

      2、預(yù)先估計會出現(xiàn)大數(shù)據(jù)量并且訪問頻繁的表,將其分為若干個表

      這種預(yù)估大差不差的,論壇里面發(fā)表帖子的表,時間長了這張表肯定很大,幾十萬,幾百萬都有可能。 聊天室里面信息表,幾十個人在一起一聊一個晚上,時間長了,這張表的數(shù)據(jù)肯定很大。像這樣的情況很多。所以這種能預(yù)估出來的大數(shù)據(jù)量表,我們就事先分出個N個表,這個N是多少,根據(jù)實際情況而定。

      優(yōu)點:避免一張表出現(xiàn)幾百萬條數(shù)據(jù),縮短了一條sql的執(zhí)行時間

      缺點:當(dāng)一種規(guī)則確定時,打破這條規(guī)則會很麻煩,上面的例子中我用的hash算法是crc32,如果我現(xiàn)在不想用這個算法了,改用md5后,會使同一個用戶的消息被存儲到不同的表中,這樣數(shù)據(jù)亂套了。擴展性很差。

      3、利用merge存儲引擎來實現(xiàn)分表

      我覺得這種方法比較適合,那些沒有事先考慮,而已經(jīng)出現(xiàn)了得,數(shù)據(jù)查詢慢的情況。這個時候如果要把已有的大數(shù)據(jù)量表分開比較痛苦,最痛苦的事就是改代碼,因為程序里面的sql語句已經(jīng)寫好了,現(xiàn)在一張表要分成幾十張表,甚至上百張表。

      示例:

      mysql>show engines;的時候你會發(fā)現(xiàn)mrg_myisam其實就是merge。

      mysql> CREATE TABLE IF NOT EXISTS `user1` (  
       ->   `id` int(11) NOT NULL AUTO_INCREMENT,  
       ->   `name` varchar(50) DEFAULT NULL,  
       ->   `sex` int(1) NOT NULL DEFAULT '0',  
       ->   PRIMARY KEY (`id`)  
       -> ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;  
      Query OK, 0 rows affected (0.05 sec)  
        
      mysql> CREATE TABLE IF NOT EXISTS `user2` (  
       ->   `id` int(11) NOT NULL AUTO_INCREMENT,  
       ->   `name` varchar(50) DEFAULT NULL,  
       ->   `sex` int(1) NOT NULL DEFAULT '0',  
       ->   PRIMARY KEY (`id`)  
       -> ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;  
      Query OK, 0 rows affected (0.01 sec)  
        
      mysql> INSERT INTO `user1` (`name`, `sex`) VALUES('張映', 0);  
      Query OK, 1 row affected (0.00 sec)  
        
      mysql> INSERT INTO `user2` (`name`, `sex`) VALUES('tank', 1);  
      Query OK, 1 row affected (0.00 sec)  
        
      mysql> CREATE TABLE IF NOT EXISTS `alluser` (  
       ->   `id` int(11) NOT NULL AUTO_INCREMENT,  
       ->   `name` varchar(50) DEFAULT NULL,  
       ->   `sex` int(1) NOT NULL DEFAULT '0',  
       ->   INDEX(id)  
       -> ) TYPE=MERGE UNION=(user1,user2) INSERT_METHOD=LAST AUTO_INCREMENT=1 ;  
      Query OK, 0 rows affected, 1 warning (0.00 sec)  
        
      mysql> select id,name,sex from alluser;  
      +----+--------+-----+  
      | id | name   | sex |  
      +----+--------+-----+  
      |  1 | 張映 |   0 |  
      |  1 | tank   |   1 |  
      +----+--------+-----+  
      2 rows in set (0.00 sec)  
        
      mysql> INSERT INTO `alluser` (`name`, `sex`) VALUES('tank2', 0);  
      Query OK, 1 row affected (0.00 sec)  
        
      mysql> select id,name,sex from user2  
       -> ;  
      +----+-------+-----+  
      | id | name  | sex |  
      +----+-------+-----+  
      |  1 | tank  |   1 |  
      |  2 | tank2 |   0 |  
      +----+-------+-----+  
      2 rows in set (0.00 sec)

      從上面的操作中,我不知道你有沒有發(fā)現(xiàn)點什么?假如我有一張用戶表user,有50W條數(shù)據(jù),現(xiàn)在要拆成二張表user1和user2,每張表25W條數(shù)據(jù),

      INSERT INTO user1(user1.id,user1.name,user1.sex)SELECT (user.id,user.name,user.sex)FROM user where user.id <= 250000

      INSERT INTO user2(user2.id,user2.name,user2.sex)SELECT (user.id,user.name,user.sex)FROM user where user.id > 250000

      這樣我就成功的將一張user表,分成了二個表,這個時候有一個問題,代碼中的sql語句怎么辦,以前是一張表,現(xiàn)在變成二張表了,代碼改動很大,這樣給程序員帶來了很大的工作量,有沒有好的辦法解決這一點呢?辦法是把以前的user表備份一下,然后刪除掉,上面的操作中我建立了一個alluser表,只把這個alluser表的表名改成user就行了。

      以上是mysql實現(xiàn)分表的方法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


      網(wǎng)站標(biāo)題:mysql實現(xiàn)分表的方法
      URL鏈接:http://www.ef60e0e.cn/article/ghoeec.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        封开县| 奉节县| 梁河县| 哈尔滨市| 辽宁省| 高清| 咸阳市| 噶尔县| 陕西省| 信丰县| 保德县| 突泉县| 和静县| 武平县| 河西区| 府谷县| 建湖县| 安阳县| 西盟| 蚌埠市| 休宁县| 商都县| 称多县| 藁城市| 灵寿县| 合水县| 偏关县| 曲松县| 新沂市| 鄄城县| 尚义县| 绥棱县| 长垣县| 武平县| 葫芦岛市| 宜昌市| 洪洞县| 华阴市| 柳江县| 忻城县| 合肥市|