數據量太大會影響性能,所以進行分庫分表以優化數據庫的性能
創新互聯建站專注于武定網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供武定營銷型網站建設,武定網站制作、武定網頁設計、武定網站官網定制、微信平臺小程序開發服務,打造武定網絡公司原創品牌,更為您提供武定網站排名全網營銷落地服務。
你這樣的情況可以使用UNION
SELECT * FROM user01 WHERE pid=張三的ID UNION
SELECT * FROM user02 WHERE pid=張三的ID UNION
SELECT * FROM user03 WHERE pid=張三的ID
【張三的ID】先用語句查詢出來:
SELECT id FROM user01 WHERE name='張三' UNION
SELECT id FROM user02 WHERE name='張三' UNION
SELECT id FROM user03 WHERE name='張三'
其實一般建議不這樣分表,數據太大可以考慮使用專業點的DBMS,程序像使用當個邏輯表,表的存儲由系統優化,有可能分布在一系列磁盤陣列上,甚至可能是分布在多個服務器上。
10t數據 你算下需要多少臺服務器存,然后哈希用戶唯一標識,給用戶平均的分配到服務器上,
但是,你的這個假設也太逗了。假設1g數據單表。存500萬條,你這10t數據,,一天就要產生5千億條記錄。你的網站干嘛的,給全銀河系的人訪問的吧
下面通過創建100張表來演示下1億條數據的分表過程,具體請看下文代碼。
當數據量猛增的時候,大家都會選擇庫表散列等等方式去優化數據讀寫速度。筆者做了一個簡單的嘗試,1億條數據,分100張表。具體實現過程如下:
首先創建100張表:
$i=0;
while($i=99){
echo
"$newNumber
\r\n";
$sql="CREATE
TABLE
`code_".$i."`
(
`full_code`
char(10)
NOT
NULL,
`create_time`
int(10)
unsigned
NOT
NULL,
PRIMARY
KEY
(`full_code`),
)
ENGINE=MyISAM
DEFAULT
CHARSET=utf8";
mysql_query($sql);
$i++;
下面說一下我的分表規則,full_code作為主鍵,我們對full_code做hash
函數如下:
$table_name=get_hash_table('code',$full_code);
function
get_hash_table($table,$code,$s=100){
$hash
=
sprintf("%u",
crc32($code));
echo
$hash;
$hash1
=
intval(fmod($hash,
$s));
return
$table."_".$hash1;
}
這樣插入數據前通過get_hash_table獲取數據存放的表名。
最后我們使用merge存儲引擎來實現一張完整的code表
CREATE
TABLE
IF
NOT
EXISTS
`code`
(
`full_code`
char(10)
NOT
NULL,
`create_time`
int(10)
unsigned
NOT
NULL,
INDEX(full_code)
)
TYPE=MERGE
UNION=(code_0,code_1,code_2.......)
INSERT_METHOD=LAST
;
這樣我們通過select
*
from
code就可以得到所有的full_code數據了。
以上介紹就是本文的全部內容,希望對大家有所幫助。
網站欄目:php多少數據要分表 php大量數據處理
路徑分享:http://vcdvsql.cn/article6/doicgog.html
成都網站建設公司_創新互聯,為您提供網站設計公司、關鍵詞優化、服務器托管、軟件開發、虛擬主機、全網營銷推廣
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯