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 把多個表做成乙個統計表,或者...