mysql大資料量處理

2021-06-21 21:49:47 字數 3473 閱讀 8849

2008-07-11 10:41:58

|  分類:

mysql|舉報

|字型大小訂閱

以下是個人的總結,有不對的地方大家指點:

設計上:

冗餘:有些能冗餘的就冗餘吧,盡量少關聯表;

垂直分割槽,一條記錄中有text,varchar()這些能拆出來就拆出來,能用小的型別就用小的型別,如:char替換varchar之類的,能使用smallint,int就不要使用long等更大的數字型;

水平分割槽:range,list,hash,key,composite分割槽,這裡分割槽說一下range是less than 的,查分割槽時會查前後的分割槽,list的in是range的相象,不過只查乙個分割槽,composite是乙個組合分割槽了,對於更超大的合適,先用range/list然後再hash/key分割槽;

目前mysql分割槽只支援內建的日誌函式有:year,month,to_day

物理上:

分割槽與索引存放在不同的物理分割槽上;

隔一定時間使資料遷移走做備份

查詢語句:

查詢中不要使用*做查詢返回字段,應寫字段;盡量不要使用巢狀語句;

盡量使用更好的關係語句;

盡量少關聯表;

查詢大資料表的時候盡量不要返回text,varchar型別字段,並且這些字段最好就不要放在同一張表中,同過id再查詳情之類形式返回

操作上:

盡量讓操作與查詢分離,特別是在大併發操作的時候;

配置上:

對mysql的配置引數優化,

如key_buffer這些快取可以設大點的:預設是8m吧,設到400m也不過份的(索引快取);

sort_buffer_size預設是5m,可以放到32m

實際例子(在csdn中發布):

mysql大資料量處理,求助 

從3張表中取資料,求乙個更好的sql語句 

表1: 

create table `corporationserver` ( 

`corporationserverid` int(11) not null auto_increment, 

`corporationkey` int(11) not null, 

`shelfcode` varchar(24) default null, 

`floorcode` varchar(24) default null, 

`ip` int(10) unsigned not null, 

`iswhite` tinyint(1) default '0', 

primary key (`corporationserverid`), 

unique key `ak_key_2` (`ip`), 

key `r_31` (`corporationkey`) 

) engine=myisam auto_increment=65537 default charset=utf8; 

表2: 

create table `ipcapture` ( 

`ipcaptureid` int(11) not null auto_increment, 

`ip` int(10) unsigned not null, 

`servicetype` varchar(128) default null, 

`proxytype` smallint(6) default null , 

`sectscope` tinyint(1) default '0', 

primary key (`ipcaptureid`), 

unique key `ak_key_2` (`ip`) 

) engine=myisam auto_increment=65618 default charset=utf8 ; 

表(分割槽)3:#這裡是一天個分割槽,每天的資料最小量限為300w算 

表httpgetlogpart2:        16711680條記錄; 

表ipcapture:65617條記錄; 

表corporationserver:65536條記錄 

查詢語句: 

log.inputdate> date '2008-07-06' and log.inputdate date '2008-07-06' and log.inputdate mysql 的myisam表會記錄著表中所存在的總數count(),所以select count(*) 是很快的,但加上了where那速度就直線下降了

大資料量處理

看看這個,異曲同工,永遠不超時 該程式是針對非常龐大的資料庫開發的,沒有用迴圈 用途 對過萬條資料的資料庫字段內容批量替換 資料庫連線 dim beeyee dbname,connstr,conn,intsn1 dim content,num,intsn,intidno,strcodea,strco...

航測大資料量處理 大資料量處理及優化措施

1 首先考慮垂直拆分庫,不同的表拆分到不同的庫中,例如使用者庫 產品庫 支付庫 2 然後考慮水平拆分庫,將乙個表的資料放到多張表中,例如按照使用者 時間 訂單號 3 插入資料的時候不建立索引 4 待資料已經插入完成後,建立索引 5 正確的指定索引字段 6 使用批量插入資料庫的方式代替單條資料的插入 ...

大資料量的處理

其實這個問題老是在面試的時候提到 1。建立專門的彙總表 這個表一般是每天晚上做統計處理 建立索引 索引的話,插入和修改會變慢,也是只做統計原因之一 用來查詢,如果量非常大,那麼分表,還是大,那麼分庫,就是資料倉儲概念了 2。關聯表查詢 多表聯合查詢 的大資料,首先就是1 把多個表做成乙個統計表,或者...