數(shù)據(jù)量太大會(huì)影響性能,所以進(jìn)行分庫(kù)分表以優(yōu)化數(shù)據(jù)庫(kù)的性能
創(chuàng)新互聯(lián)建站專注于武定網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供武定營(yíng)銷型網(wǎng)站建設(shè),武定網(wǎng)站制作、武定網(wǎng)頁(yè)設(shè)計(jì)、武定網(wǎng)站官網(wǎng)定制、微信平臺(tái)小程序開發(fā)服務(wù),打造武定網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供武定網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
你這樣的情況可以使用UNION
SELECT * FROM user01 WHERE pid=張三的ID UNION
SELECT * FROM user02 WHERE pid=張三的ID UNION
SELECT * FROM user03 WHERE pid=張三的ID
【張三的ID】先用語(yǔ)句查詢出來(lái):
SELECT id FROM user01 WHERE name='張三' UNION
SELECT id FROM user02 WHERE name='張三' UNION
SELECT id FROM user03 WHERE name='張三'
其實(shí)一般建議不這樣分表,數(shù)據(jù)太大可以考慮使用專業(yè)點(diǎn)的DBMS,程序像使用當(dāng)個(gè)邏輯表,表的存儲(chǔ)由系統(tǒng)優(yōu)化,有可能分布在一系列磁盤陣列上,甚至可能是分布在多個(gè)服務(wù)器上。
10t數(shù)據(jù) 你算下需要多少臺(tái)服務(wù)器存,然后哈希用戶唯一標(biāo)識(shí),給用戶平均的分配到服務(wù)器上,
但是,你的這個(gè)假設(shè)也太逗了。假設(shè)1g數(shù)據(jù)單表。存500萬(wàn)條,你這10t數(shù)據(jù),,一天就要產(chǎn)生5千億條記錄。你的網(wǎng)站干嘛的,給全銀河系的人訪問的吧
下面通過創(chuàng)建100張表來(lái)演示下1億條數(shù)據(jù)的分表過程,具體請(qǐng)看下文代碼。
當(dāng)數(shù)據(jù)量猛增的時(shí)候,大家都會(huì)選擇庫(kù)表散列等等方式去優(yōu)化數(shù)據(jù)讀寫速度。筆者做了一個(gè)簡(jiǎn)單的嘗試,1億條數(shù)據(jù),分100張表。具體實(shí)現(xiàn)過程如下:
首先創(chuàng)建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++;
下面說(shuō)一下我的分表規(guī)則,full_code作為主鍵,我們對(duì)full_code做hash
函數(shù)如下:
$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;
}
這樣插入數(shù)據(jù)前通過get_hash_table獲取數(shù)據(jù)存放的表名。
最后我們使用merge存儲(chǔ)引擎來(lái)實(shí)現(xiàn)一張完整的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數(shù)據(jù)了。
以上介紹就是本文的全部?jī)?nèi)容,希望對(duì)大家有所幫助。