日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
MySQL5.5分區(qū)之truncate分區(qū)詳解

上次我們介紹了:MySQL 5.5分區(qū)之非整數(shù)列分區(qū)詳解,本次我們介紹一下MySQL 5.5 分區(qū)之truncate分區(qū)的知識,接下來我們就來了解一下這部分內(nèi)容。

發(fā)展壯大離不開廣大客戶長期以來的信賴與支持,我們將始終秉承“誠信為本、服務(wù)至上”的服務(wù)理念,堅持“二合一”的優(yōu)良服務(wù)模式,真誠服務(wù)每家企業(yè),認真做好每個細節(jié),不斷完善自我,成就企業(yè),實現(xiàn)共贏。行業(yè)涉及成都水處理設(shè)備等,在網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、WAP手機網(wǎng)站、VI設(shè)計、軟件開發(fā)等項目上具有豐富的設(shè)計經(jīng)驗。

可用性增強:truncate分區(qū)

分區(qū)最吸引人的一個功能是瞬間移除大量記錄的能力,DBA都喜歡將歷史記錄存儲到按日期分區(qū)的分區(qū)表中,這樣可以定期刪除過時的歷史數(shù)據(jù),這種方法相當管用,假設(shè)***個分區(qū)存儲的是最舊的歷史記錄,那么你可以直接刪除***個分區(qū),然后再在末尾建立一個新分區(qū)保存最近的歷史記錄,這樣循環(huán)下去就可以實現(xiàn)歷史記錄的快速清除。

但當你需要移除分區(qū)中的部分數(shù)據(jù)時,事情就不是那么簡單了,刪除分區(qū)沒有問題,但如果是清空分區(qū),就很頭痛了,要移除分區(qū)中的所有數(shù)據(jù),但需要保留分區(qū)本身,你可以:

使用DELETE語句,但我們知道DELETE語句的性能都很差。

使用DROP PARTITION語句,緊跟著一個EORGANIZE PARTITIONS語句重新創(chuàng)建分區(qū),但這樣做比前一個方法的成本要高出許多。

MySQL 5.5引入了TRUNCATE PARTITION,它和DROP PARTITION語句有些類似,但它保留了分區(qū)本身,也就是說分區(qū)還可以重復利用。TRUNCATE PARTITION應該是DBA工具箱中的必備工具。

微調(diào)功能:TO_SECONDS

分區(qū)增強包有一個新的函數(shù)處理DATE和DATETIME列,使用TO_SECONDS函數(shù),你可以將日期/時間列轉(zhuǎn)換成自0年以來的秒數(shù),如果你想使用小于1天的間隔進行分區(qū),那么這個函數(shù)就可以幫到你。

TO_SECONDS會觸發(fā)分區(qū)修整,與TO_DAYS不同,它可以反過來使用,就是FROM_DAYS,對于TO_SECONDS就沒有這樣的反向函數(shù)了,但要自己動手DIY一個也不是難事。

 
 
 
  1. drop function if exists from_seconds;  
  2. delimiter //  
  3. create function from_seconds (secs bigint)  
  4. returns DATETIME  
  5. begin 
  6.     declare days INT;  
  7.     declare secs_per_day INT;  
  8.     DECLARE ZH INT;  
  9.     DECLARE ZM INT;  
  10.     DECLARE ZS INT;  
  11.     set secs_per_day = 60 * 60 * 24;  
  12.     set days = floor(secs / secs_per_day);  
  13.     set secssecs = secs - (secs_per_day * days);  
  14.     set ZH = floor(secs / 3600);  
  15.     set ZM = floor(secs / 60) - ZH * 60;  
  16.     set ZS = secs - (ZH * 3600 + ZM * 60);  
  17.     return CAST(CONCAT(FROM_DAYS(days), ' ', ZH, ':', ZM, ':', ZS) as DATETIME);  
  18. end //  
  19. delimiter ; 

有了這些新武器,我們可以有把握地創(chuàng)建一個小于1天的臨時分區(qū),如:

 
 
 
  1. CREATE TABLE t2 (  
  2.   dt datetime  
  3. )  
  4. PARTITION BY RANGE (to_seconds(dt))  
  5. (  
  6.   PARTITION p01 VALUES LESS THAN (to_seconds('2009-11-30 08:00:00')) ,  
  7.   PARTITION p02 VALUES LESS THAN (to_seconds('2009-11-30 16:00:00')) ,  
  8.   PARTITION p03 VALUES LESS THAN (to_seconds('2009-12-01 00:00:00')) ,  
  9.   PARTITION p04 VALUES LESS THAN (to_seconds('2009-12-01 08:00:00')) ,  
  10.   PARTITION p05 VALUES LESS THAN (to_seconds('2009-12-01 16:00:00')) ,  
  11.   PARTITION p06 VALUES LESS THAN (MAXVALUE)  
  12. );  
  13. show create table t2\G  
  14. *************************** 1. row ***************************  
  15. Table: t2  
  16. Create Table: CREATE TABLE `t2` (  
  17.   `dt` datetime DEFAULT NULL 
  18. ) ENGINE=MyISAM DEFAULT CHARSET=latin1  
  19. /*!50500 PARTITION BY RANGE (to_seconds(dt))  
  20. (PARTITION p01 VALUES LESS THAN (63426787200) ENGINE = MyISAM,  
  21. PARTITION p02 VALUES LESS THAN (63426816000) ENGINE = MyISAM,  
  22. PARTITION p03 VALUES LESS THAN (63426844800) ENGINE = MyISAM,  
  23. PARTITION p04 VALUES LESS THAN (63426873600) ENGINE = MyISAM,  
  24. PARTITION p05 VALUES LESS THAN (63426902400) ENGINE = MyISAM,  
  25. PARTITION p06 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */ 

因為我們沒有使用COLUMNS關(guān)鍵字,我們也不能使用它,因為它不支持混合列和函數(shù),表定義中的記錄值就是TO_SECONDS函數(shù)的計算結(jié)果。

但我們還是要感謝新的函數(shù),我們可以反推這個值,換算成一個更容易讀懂的日期。

 
 
 
  1. select 
  2.   partition_name part,  
  3.   partition_expression expr,  
  4.   from_seconds(partition_description) descr,  
  5.   table_rows  
  6. FROM 
  7. INFORMATION_SCHEMA.partitions  
  8. WHERE 
  9.     TABLE_SCHEMA = 'test' 
  10.     AND TABLE_NAME='t2';  
  11. +------+----------------+---------------------+------------+  
  12. | part | expr           | descr               | table_rows |  
  13. +------+----------------+---------------------+------------+  
  14. | p01  | to_seconds(dt) | 2009-11-30 08:00:00 |          0 |  
  15. | p02  | to_seconds(dt) | 2009-11-30 16:00:00 |          0 |  
  16. | p03  | to_seconds(dt) | 2009-12-01 00:00:00 |          0 |  
  17. | p04  | to_seconds(dt) | 2009-12-01 08:00:00 |          0 |  
  18. | p05  | to_seconds(dt) | 2009-12-01 16:00:00 |          0 |  
  19. | p06  | to_seconds(dt) | 0000-00-00 00:00:00 |          0 |  
  20. +------+----------------+---------------------+------------+ 

總結(jié):

MySQL 5.5對分區(qū)用戶絕對是個好消息,雖然沒有提供直接的性能增強的方法(如果你按響應時間評估性能),但更易于使用的增強功能,以及TRUNCATE PARTITION命令都可以為DBA節(jié)省大量的時間,有時對最終用戶亦如此。

關(guān)于MySQL 5.5 分區(qū)之truncate分區(qū)的知識就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

原文出處:http://lujia35.iteye.com/blog/718899。


網(wǎng)頁名稱:MySQL5.5分區(qū)之truncate分區(qū)詳解
網(wǎng)站URL:http://www.5511xx.com/article/cdisiis.html