<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MySQL分表后,如何做分頁查詢?

          共 2690字,需瀏覽 6分鐘

           ·

          2022-11-01 12:09

          程序員的成長之路
          互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享 
          關(guān)注


          閱讀本文大概需要 2.8 分鐘。

          來自:blog.csdn.net/joy_tom/article/details/109857573

          隨著項(xiàng)目運(yùn)行的時(shí)間越來越長,有些數(shù)據(jù)的存儲也會越來越大,比如一些點(diǎn)擊量,瀏覽量量,單表的數(shù)據(jù)可以到達(dá)上千萬條數(shù)據(jù),這時(shí)候會存在單表數(shù)據(jù)過大,查詢效率低的問題。
          為了提高查詢效率這時(shí)候需要對單表進(jìn)行拆分,比如一張1000萬條數(shù)據(jù)的表,我們需要把它拆分為10張表,一張表就需要100萬,mysql中單表都有一個(gè)最大存儲的閾值,數(shù)據(jù)量不能超過這個(gè)值;
          分表之間,我們需要去生產(chǎn)一個(gè)上萬條的數(shù)據(jù)的表,這里我生產(chǎn)了如下的數(shù)據(jù):
          圖片
          我需要對這張表進(jìn)行拆分多張,我這里拆分了2張表;
          第一步:
          表一:

          DROP table IF EXISTS tb_member1;
          create table tb_member1(
              id bigint primary key auto_increment ,
              name varchar(20),
              age tinyint not null default '0'
          )ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

          表二:

          DROP table IF EXISTS tb_member2;
          create table tb_member2(
              id bigint primary key auto_increment ,
              name varchar(20),
              age tinyint not null default '0'
          )ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

          接下來開始進(jìn)行拆分:

          insert into tb_member1(id,name,sex) select id,name,sex from dd_user where id%2=0;
          insert into tb_member2(id,name,sex) select id,name,sex from dd_user where id%2=1;

          數(shù)據(jù)被分為:
          圖片
          圖片
          這時(shí)候表基本是已經(jīng)拆分完成。
          接下來,我們需要考慮的是一張user表被拆分成2張表,那分頁如何實(shí)現(xiàn)呢?
          第一步:
          創(chuàng)建一個(gè)主表:

          DROP table IF EXISTS tb_member_all;
          create table tb_member_all(
          id bigint primary key auto_increment ,
          name varchar(20),
          age tinyint not null default '0'
          )ENGINE=MERGE UNION=(tb_member1,tb_member2) INSERT_METHOD=LAST CHARSET=utf8 AUTO_INCREMENT=1 ;

          執(zhí)行上述出現(xiàn)如下問題:

          ERROR 1168 (HY000): Unable to open underlying table which is differently defined
          or of non-MyISAM type or doesn't exist

          需要檢查:
          1. 查看上面的分表數(shù)據(jù)庫引擎是不是MyISAM.
          2. 查看分表與指標(biāo)的字段定義是否一致。
          上述的都成功以后,我們會發(fā)現(xiàn),你在member1或者member2中創(chuàng)建數(shù)據(jù)member_all表中也會出現(xiàn)同樣的數(shù)據(jù)
          所以:tb_member_all表就是tb_member1,tb_member2的并集,剛剛實(shí)現(xiàn)到這里,我也沒理解,后來看了一些文檔,了解了一下:
          圖片
          其實(shí)tb_member_all表里面是沒有存儲數(shù)據(jù),它就是一個(gè)外殼,里面的數(shù)據(jù)是tb_member1,tb_member2的并集,數(shù)據(jù)的存儲是放在分表中;
          圖片
          圖片
          圖片
          這時(shí)候,我們就豁然開朗了,利用這個(gè)tb_member_all,我們就可以實(shí)現(xiàn)數(shù)據(jù)查詢的分頁;
          java代碼實(shí)現(xiàn):
          圖片
          id%2這是取模處理,分配數(shù)據(jù)進(jìn)入哪個(gè)數(shù)據(jù);
          我們在做分頁的時(shí)候就利用tb_member_all表去做分頁查詢實(shí)現(xiàn)
          圖片
          圖片
          圖片
          測試結(jié)果:
          <END>

          推薦閱讀:

          為了隨時(shí)能敲代碼,我用樹莓派手搓一臺 Linux 掌上電腦

          圖解 Redis,還有人看不懂?

          互聯(lián)網(wǎng)初中高級大廠面試題(9個(gè)G)

          內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊(duì)列、高性能緩存、反射、Spring全家桶原理、微服務(wù)、Zookeeper......等技術(shù)棧!

          ?戳閱讀原文領(lǐng)??!                                  朕已閱 

          瀏覽 42
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99高清无码 | 欧美综合精品 | 亚洲无码视频在线观看高清 | 欧美色图亚洲色图另类 | 免费一级A片奶好大 |