Mysql表的橫向拆分與縱向拆分及簡單案例


 表的拆分分為橫向拆分(記錄的拆分)和縱向拆分(字段的拆分)。拆分表的目的:提高查詢速度。

  1.橫向拆分

    我們從一個案例去解釋,情景是這樣的:某某博客,有50W的博客量,有2w的用戶,發現隨着用戶和博客數的增加,查詢速度日漸下降,現在要對博客表blog與用戶表user進行優化。

  表結構如下:

 1 create table blog(
 2         bid
 3         title
 4         content
 5         pubtime
 6         uid
 7     ) 50萬
 8 create table user(
 9         uid
10         username
11         password
12         nick
13         ......
14     )  2萬

  首先我們要決定根據哪個字段對記錄進行拆分,查詢決定了拆分,在這里我們根據uid字段對兩個表進行拆分是比較合理的。

 1 博客表根據uid去拆分:
 2     1-5000------blog_1
 3     5001-10000-----blog_2
 4     10001-15000----blog_3
 5     15001-20000----blog_4
 6 人員表根據uid 等分:
 7     1-5000------user_1
 8     5001-10000-----user_2
 9     10001-15000----user_3
10     15001-20000----user_4  

  比如查詢某人的博客:

1 根據uid確認表名:
2     $num=ceil(12345/5000);
3     select uid,bid,title,pubtime from blog_$num where uid=12345;

  2.縱向拆分:把活躍字段(常用)、惰性字段(不常用)分開。

   案例:比如人員表,活躍字段像用戶名、密碼、昵稱等,惰性字段像手機號、郵箱、性別等不經常使用和修改的字段。

  一張完整的用戶表可以拆分為兩張表,如下:

 1 create table user(
 2     uid int key auto_increment,
 3     username char(20),
 4     password char(32) not null, 
 5     nick char(10)
 6 );
 7 create table user_ext(
 8     uid
 9     regtime
10     name
11     email
12     qq
13     phone
14     sex    
15 )

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM