精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入了解MySQL 5.5分區(qū)功能增強(qiáng)

原創(chuàng)
數(shù)據(jù)庫 MySQL 數(shù)據(jù)庫運(yùn)維
Oracle在并購Sun后對于MySQL的態(tài)度令人尋味。在新發(fā)布的MySQL 5.5中帶來了許多增強(qiáng)的功能,在這篇文章中,我們將解釋一下MySQL 5.5分區(qū)功能的增強(qiáng)特性。

【51CTO經(jīng)典譯文】MySQL 5.5的發(fā)布帶來了許多增強(qiáng)的功能,雖然已經(jīng)報(bào)道了很多增強(qiáng)功能,如半同步復(fù)制,但大家卻忽略了分區(qū)方面的增強(qiáng),有時(shí)甚至還對其真正意義產(chǎn)生了誤解,在這篇文章中,我們希望解釋一下這些很酷的增強(qiáng),特別是我們大多數(shù)人還沒有完全理解的地方。51CTO向您推薦《MySQL數(shù)據(jù)庫入門與精通教程》。

MySQL 5.5分區(qū)增強(qiáng)

圖 1 大家還沒注意到我MySQL的分區(qū)功能也很強(qiáng)了哦

非整數(shù)列分區(qū)

任何使用過分區(qū)的人應(yīng)該都遇到過不少問題,特別是面對非整數(shù)列分區(qū)時(shí),MySQL 5.1只能處理整數(shù)列分區(qū),如果你想在日期或字符串列上進(jìn)行分區(qū),你不得不使用函數(shù)對其進(jìn)行轉(zhuǎn)換。

MySQL 5.5中新增了兩類分區(qū)方法,RANG和LIST分區(qū)法,同時(shí)在新的函數(shù)中增加了一個COLUMNS關(guān)鍵詞。我們假設(shè)有這樣一個表:

  1. CREATE TABLE expenses (  
  2.   expense_date DATE NOT NULL,  
  3.   category VARCHAR(30),  
  4.   amount DECIMAL (10,3)  
  5. ); 

如果你想使用MySQL 5.1中的分區(qū)類型,那你必須將類型轉(zhuǎn)換成整數(shù),需要使用一個額外的查找表,到了MySQL 5.5中,你可以不用再進(jìn)行類型轉(zhuǎn)換了,如:

 

  1. ALTER TABLE expenses  
  2. PARTITION BY LIST COLUMNS (category)  
  3. (  
  4.   PARTITION p01 VALUES IN ( 'lodging''food'),  
  5.   PARTITION p02 VALUES IN ( 'flights''ground transportation'),  
  6.   PARTITION p03 VALUES IN ( 'leisure''customer entertainment'),  
  7.   PARTITION p04 VALUES IN ( 'communications'),  
  8.   PARTITION p05 VALUES IN ( 'fees')  
  9. ); 

這樣的分區(qū)語句除了更加易讀外,對數(shù)據(jù)的組織和管理也非常清晰,上面的例子只對category列進(jìn)行分區(qū)。

在MySQL 5.1中使用分區(qū)另一個讓人頭痛的問題是date類型(即日期列),你不能直接使用它們,必須使用YEAR或TO_DAYS轉(zhuǎn)換這些列,如:

  1. /* 在MySQL 5.1中*/  
  2. CREATE TABLE t2  
  3. (  
  4.   dt DATE 
  5. )  
  6. PARTITION BY RANGE (TO_DAYS(dt))  
  7. (  
  8.   PARTITION p01 VALUES LESS THAN (TO_DAYS('2007-01-01')),  
  9.   PARTITION p02 VALUES LESS THAN (TO_DAYS('2008-01-01')),  
  10.   PARTITION p03 VALUES LESS THAN (TO_DAYS('2009-01-01')),  
  11.   PARTITION p04 VALUES LESS THAN (MAXVALUE));  
  12.  
  13. SHOW CREATE TABLE t2 \G  
  14. *************************** 1. row ***************************  
  15.        Table: t2  
  16. Create TableCREATE TABLE `t2` (  
  17.   `dt` date DEFAULT NULL 
  18. ) ENGINE=MyISAM DEFAULT CHARSET=latin1  
  19. /*!50100 PARTITION BY RANGE (TO_DAYS(dt))  
  20. (PARTITION p01 VALUES LESS THAN (733042) ENGINE = MyISAM,  
  21.  PARTITION p02 VALUES LESS THAN (733407) ENGINE = MyISAM,  
  22.  PARTITION p03 VALUES LESS THAN (733773) ENGINE = MyISAM,  
  23.  PARTITION p04 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */ 

看上去非常糟糕,當(dāng)然也有變通辦法,但麻煩確實(shí)不少。使用YEAR或TO_DAYS定義一個分區(qū)的確讓人費(fèi)解,查詢時(shí)不得不使用赤裸列,因?yàn)榧恿撕瘮?shù)的查詢不能識別分區(qū)。

但在MySQL 5.5中情況發(fā)生了很大的變化,現(xiàn)在在日期列上可以直接分區(qū),并且方法也很簡單。

  1. /*在MySQL 5.5中*/  
  2. CREATE TABLE t2  
  3. (  
  4.   dt DATE 
  5. )  
  6. PARTITION BY RANGE COLUMNS (dt)  
  7. (  
  8.   PARTITION p01 VALUES LESS THAN ('2007-01-01'),  
  9.   PARTITION p02 VALUES LESS THAN ('2008-01-01'),  
  10.   PARTITION p03 VALUES LESS THAN ('2009-01-01'),  
  11.   PARTITION p04 VALUES LESS THAN (MAXVALUE));  
  12.  
  13. SHOW CREATE TABLE t2 \G  
  14. *************************** 1. row ***************************  
  15.        Table: t2  
  16. Create TableCREATE TABLE `t2` (  
  17.   `dt` date DEFAULT NULL 
  18. ) ENGINE=MyISAM DEFAULT CHARSET=latin1  
  19. /*!50500 PARTITION BY RANGE  COLUMNS(dt)  
  20. (PARTITION p01 VALUES LESS THAN ('2007-01-01') ENGINE = MyISAM,  
  21.  PARTITION p02 VALUES LESS THAN ('2008-01-01') ENGINE = MyISAM,  
  22.  PARTITION p03 VALUES LESS THAN ('2009-01-01') ENGINE = MyISAM,  
  23.  PARTITION p04 VALUES LESS THAN (MAXVALUE) ENGINE = MyISAM) */ 

在這里,通過函數(shù)定義和通過列查詢之間沒有沖突,因?yàn)槭前戳卸x的,我們在定義中插入的值是保留的。

多列分區(qū)

COLUMNS關(guān)鍵字現(xiàn)在允許字符串和日期列作為分區(qū)定義列,同時(shí)還允許使用多個列定義一個分區(qū),你可能在官方文檔中已經(jīng)看到了一些例子,如: 

  1. CREATE TABLE p1 (  
  2.   a INT,  
  3.   b INT,  
  4.   c INT 
  5. )  
  6. PARTITION BY RANGE COLUMNS (a,b)  
  7. (  
  8.   PARTITION p01 VALUES LESS THAN (10,20),  
  9.   PARTITION p02 VALUES LESS THAN (20,30),  
  10.   PARTITION p03 VALUES LESS THAN (30,40),  
  11.   PARTITION p04 VALUES LESS THAN (40,MAXVALUE),  
  12.   PARTITION p05 VALUES LESS THAN (MAXVALUE,MAXVALUE)  
  13. );  
  14.  
  15. CREATE TABLE p2 (  
  16.   a INT,  
  17.   b INT,  
  18.   c INT 
  19. )  
  20. PARTITION BY RANGE COLUMNS (a,b)  
  21. (  
  22.   PARTITION p01 VALUES LESS THAN (10,10),  
  23.   PARTITION p02 VALUES LESS THAN (10,20),  
  24.   PARTITION p03 VALUES LESS THAN (10,30),  
  25.   PARTITION p04 VALUES LESS THAN (10,MAXVALUE),  
  26.   PARTITION p05 VALUES LESS THAN (MAXVALUE,MAXVALUE)  

同樣還有PARTITION BY RANGE COLUMNS (a,b,c)等其它例子。由于我很長時(shí)間都在使用MySQL 5.1的分區(qū),我對多列分區(qū)的含義不太了解,LESS THAN (10,10)是什么意思?如果下一個分區(qū)是LESS THAN (10,20)會發(fā)生什么?相反,如果是(20,30)又會如何?

所有這些問題都需要一個答案,在回答之前,他們需要更好地理解我們在做什么。

開始時(shí)可能有些混亂,當(dāng)所有分區(qū)有一個不同范圍的值時(shí),實(shí)際上,它只是在表的一個列上進(jìn)行了分區(qū),但事實(shí)并非如此,在下面的例子中:

  1. CREATE TABLE p1_single (  
  2.   a INT,  
  3.   b INT,  
  4.   c INT 
  5. )  
  6. PARTITION BY RANGE COLUMNS (a)  
  7. (  
  8.   PARTITION p01 VALUES LESS THAN (10),  
  9.   PARTITION p02 VALUES LESS THAN (20),  
  10.   PARTITION p03 VALUES LESS THAN (30),  
  11.   PARTITION p04 VALUES LESS THAN (40),  
  12.   PARTITION p05 VALUES LESS THAN (MAXVALUE)  
  13. ); 

它和前面的表p1不一樣,如果你在表p1中插入(10,1,1),它將會進(jìn)入***個分區(qū),相反,在表p1_single中,它將會進(jìn)入第二個分區(qū),其原因是(10,1)小于(10,10),如果你僅僅關(guān)注***個值,你還沒有意識到你在比較一個元組,而不是一個單一的值。

現(xiàn)在我們來分析一下最難懂的地方,當(dāng)你需要確定某一行應(yīng)該放在哪里時(shí)會發(fā)生什么?你是如何確定類似(10,9) < (10,10)這種運(yùn)算的值的?答案其實(shí)很簡單,當(dāng)你對它們進(jìn)行排序時(shí),使用相同的方法計(jì)算兩條記錄的值。

  1. a=10  
  2. b=9  
  3. (a,b) < (10,10) ?  
  4.  
  5. # evaluates to:  
  6.  
  7. (a < 10)  
  8. OR 
  9. ((a = 10) AND ( b < 10))  
  10.  
  11. # which translates to:  
  12.  
  13. (10 < 10)  
  14. OR 
  15. ((10 = 10) AND ( 9 < 10)) 

如果有三列,表達(dá)式會更長,但不會更復(fù)雜。你首先在***個項(xiàng)目上測試小于運(yùn)算,如果有兩個或更多的分區(qū)與之匹配,接著就測試第二個項(xiàng)目,如果不止一個候選分區(qū),那還需要測試第三個項(xiàng)目。

下圖所顯示的內(nèi)容表示將遍歷三條記錄插入到使用以下代碼定義的分區(qū)中:

(10,10),

(10,20),

(10,30),

(10, MAXVALUE)

 

 

元組

圖 2 元組比較。當(dāng)***個值小于分區(qū)定義的***個范圍時(shí),那么該行將屬于這里了。

 

 

數(shù)值比較

圖 3 元組比較。當(dāng)***個值等于分區(qū)定義的***個范圍,我們需要比較第二個項(xiàng)目,如果它小于第二個范圍,那么該行將屬于這里了。

 

 

元組比較

圖 4 元組比較。當(dāng)***個值和第二個值等于他們對應(yīng)的范圍時(shí),如果元組不小于定義的范圍,那么它就不屬于這里,繼續(xù)下一步。

 

 

元組比較2

圖 5 元組比較。在下一個范圍時(shí),***個項(xiàng)目是等于,第二個項(xiàng)目是小于,因此元組更小,那么該行就屬于這里了。

在這些圖的幫助下,我們對插入一條記錄到多列分區(qū)表的步驟有了更深的了解,這些都是理論上的,為了幫助你更好地掌握新功能,我們再來看一個更高級一點(diǎn)的例子,對于比較務(wù)實(shí)的讀者更有意義,下面是表的定義腳本:

  1. CREATE TABLE employees (  
  2.   emp_no int(11) NOT NULL,  
  3.   birth_date date NOT NULL,  
  4.   first_name varchar(14) NOT NULL,  
  5.   last_name varchar(16) NOT NULL,  
  6.   gender char(1) DEFAULT NULL,  
  7.   hire_date date NOT NULL 
  8. ) ENGINE=MyISAM  
  9. PARTITION BY RANGE  COLUMNS(gender,hire_date)  
  10. (PARTITION p01 VALUES LESS THAN ('F','1990-01-01') ,  
  11.  PARTITION p02 VALUES LESS THAN ('F','2000-01-01') ,  
  12.  PARTITION p03 VALUES LESS THAN ('F',MAXVALUE) ,  
  13.  PARTITION p04 VALUES LESS THAN ('M','1990-01-01') ,  
  14.  PARTITION p05 VALUES LESS THAN ('M','2000-01-01') ,  
  15.  PARTITION p06 VALUES LESS THAN ('M',MAXVALUE) ,  
  16.  PARTITION p07 VALUES LESS THAN (MAXVALUE,MAXVALUE) 

和上面的例子不同,這個例子更好理解,***個分區(qū)用來存儲雇傭于1990年以前的女職員,第二個分區(qū)存儲股用于1990-2000年之間的女職員,第三個分區(qū)存儲所有剩下的女職員。對于分區(qū)p04到p06,我們策略是一樣的,只不過存儲的是男職員。***一個分區(qū)是控制情況。

看完后你可能要問,我怎么知道某一行存儲在那個分區(qū)中的?有兩個辦法,***個辦法是使用與分區(qū)定義相同的條件作為查詢條件進(jìn)行查詢。

  1. SELECT 
  2. CASE 
  3.   WHEN gender = 'F' AND hire_date < '1990-01-01' 
  4.   THEN 'p1' 
  5.   WHEN gender = 'F' AND hire_date < '2000-01-01' 
  6.   THEN 'p2' 
  7.   WHEN gender = 'F' AND hire_date < '2999-01-01' 
  8.   THEN 'p3' 
  9.   WHEN gender = 'M' AND hire_date < '1990-01-01' 
  10.   THEN 'p4' 
  11.   WHEN gender = 'M' AND hire_date < '2000-01-01' 
  12.   THEN 'p5' 
  13.   WHEN gender = 'M' AND hire_date < '2999-01-01' 
  14.   THEN 'p6' 
  15. ELSE 
  16.   'p7' 
  17. END as p,  
  18. COUNT(*) AS rows 
  19. FROM employees  
  20. GROUP BY p;  
  21.  
  22. +------+-------+  
  23. | p    | rows  |  
  24. +------+-------+  
  25. | p1   | 66212 |  
  26. | p2   | 53832 |  
  27. | p3   |     7 |  
  28. | p4   | 98585 |  
  29. | p5   | 81382 |  
  30. | p6   |     6 |  
  31. +------+-------+ 

如果表是MyISAM或ARCHIVE,你可以信任由INFORMATION_SCHEMA提供的統(tǒng)計(jì)信息。 

  1. SELECT 
  2.   partition_name part,  
  3.   partition_expression expr,  
  4.   partition_description descr,  
  5.   table_rows  
  6. FROM 
  7.   INFORMATION_SCHEMA.partitions  
  8. WHERE 
  9.   TABLE_SCHEMA = schema()  
  10.   AND TABLE_NAME='employees';  
  11. +------+------------------+-------------------+------------+  
  12. | part | expr             | descr             | table_rows |  
  13. +------+------------------+-------------------+------------+  
  14. | p01  | gender,hire_date | 'F','1990-01-01'  |      66212 |  
  15. | p02  | gender,hire_date | 'F','2000-01-01'  |      53832 |  
  16. | p03  | gender,hire_date | 'F',MAXVALUE      |          7 |  
  17. | p04  | gender,hire_date | 'M','1990-01-01'  |      98585 |  
  18. | p05  | gender,hire_date | 'M','2000-01-01'  |      81382 |  
  19. | p06  | gender,hire_date | 'M',MAXVALUE      |          6 |  
  20. | p07  | gender,hire_date | MAXVALUE,MAXVALUE |          0 |  
  21. +------+------------------+-------------------+------------+ 

如果存儲引擎是InnoDB,上面的值就是一個近似值,如果你需要確切的值,那你就不能信任它們。

另一個問題是它的性能,這些增強(qiáng)觸發(fā)了分區(qū)修整嗎?答案毫不含糊,是的。與MySQL 5.1有所不同,在5.1中日期分區(qū)只能與兩個函數(shù)工作,在MySQL 5.5中,任何使用了COLUMNS關(guān)鍵字定義的分區(qū)都可以使用分區(qū)修整,下面還是測試一下吧。

  1. select count(*) from employees where gender='F' and hire_date < '1990-01-01';  
  2. +----------+  
  3. count(*) |  
  4. +----------+  
  5. |    66212 |  
  6. +----------+  
  7. 1 row in set (0.05 sec)  
  8.  
  9. explain partitions select count(*) from employees where gender='F' and hire_date < '1990-01-01'\G  
  10. *************************** 1. row ***************************  
  11.            id: 1  
  12.   select_type: SIMPLE  
  13.         table: employees  
  14.    partitions: p01  
  15.          type: ALL 
  16. possible_keys: NULL 
  17.           keyNULL 
  18.       key_len: NULL 
  19.           ref: NULL 
  20.          rows: 300024  
  21.         Extra: Using where 

使用定義***個分區(qū)的條件,我們獲得了一個非常優(yōu)化的查詢,不僅如此,部分條件也將從分區(qū)修整中受益。

  1. select count(*) from employees where gender='F';  
  2. +----------+  
  3. count(*) |  
  4. +----------+  
  5. |   120051 |  
  6. +----------+  
  7. 1 row in set (0.12 sec)  
  8.  
  9. explain partitions select count(*) from employees where gender='F'\G  
  10. *************************** 1. row ***************************  
  11.            id: 1  
  12.   select_type: SIMPLE  
  13.         table: employees  
  14.    partitions: p01,p02,p03,p04  
  15.          type: ALL 
  16. possible_keys: NULL 
  17.           keyNULL 
  18.       key_len: NULL 
  19.           ref: NULL 
  20.          rows: 300024  
  21.         Extra: Using where 

它和復(fù)合索引的算法一樣,如果你的條件指的是索引最左邊的部分,MySQL將會使用它。與此類似,如果你的條件指的是分區(qū)定義最左邊的部分,MySQL將會盡可能修整。它和復(fù)合索引一起出現(xiàn),如果你只使用最右邊的條件,分區(qū)修整不會工作。

  1. select count(*) from employees where hire_date < '1990-01-01';  
  2. +----------+  
  3. count(*) |  
  4. +----------+  
  5. |   164797 |  
  6. +----------+  
  7. 1 row in set (0.18 sec)  
  8.  
  9. explain partitions select count(*) from employees where hire_date < '1990-01-01'\G  
  10. *************************** 1. row ***************************  
  11.            id: 1  
  12.   select_type: SIMPLE  
  13.         table: employees  
  14.    partitions: p01,p02,p03,p04,p05,p06,p07  
  15.          type: ALL 
  16. possible_keys: NULL 
  17.           keyNULL 
  18.       key_len: NULL 
  19.           ref: NULL 
  20.          rows: 300024  
  21.         Extra: Using where 

如果不用分區(qū)定義的***部分,使用分區(qū)定義的第二部分,那么將會發(fā)生全表掃描,在設(shè)計(jì)分區(qū)和編寫查詢時(shí)要緊記這一條。

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

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

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

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

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

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

更多微調(diào)功能:TO_SECONDS

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

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

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

有了這些新武器,我們可以有把握地創(chuàng)建一個小于1天的臨時(shí)分區(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 TableCREATE 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) */ 

因?yàn)槲覀儧]有使用COLUMNS關(guān)鍵字,我們也不能使用它,因?yàn)樗恢С只旌狭泻秃瘮?shù),表定義中的記錄值就是TO_SECONDS函數(shù)的計(jì)算結(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ū)用戶絕對是個好消息,雖然沒有提供直接的性能增強(qiáng)的方法(如果你按響應(yīng)時(shí)間評估性能),但更易于使用的增強(qiáng)功能,以及TRUNCATE PARTITION命令都可以為DBA節(jié)省大量的時(shí)間,有時(shí)對最終用戶亦如此。

這些增強(qiáng)的功能可能會在下一個里程碑發(fā)布時(shí)得到更新,最終版本預(yù)計(jì)會在2010年年中發(fā)布,屆時(shí)所有分區(qū)用戶都可以嘗試一下!

原文出處:http://dev.mysql.com/tech-resources/articles/mysql_55_partitioning.html

原文名:A deep look at MySQL 5.5 partitioning enhancements

作者:Giuseppe

【編輯推薦】

  1. MySQL創(chuàng)始人打造MariaDB 全面兼容MySQL 5.1
  2. 從MySQL 5.5發(fā)布看開源數(shù)據(jù)庫版本升級新模式
  3. MySQL 5.5發(fā)布 支持半同步復(fù)制
  4. 詳解MySQL中EXPLAIN解釋命令
  5. MySQL數(shù)據(jù)庫中的外鍵約束詳解
責(zé)任編輯:彭凡 來源: 51CTO
相關(guān)推薦

2020-06-28 13:54:22

Apache Spar窗口函數(shù)數(shù)據(jù)

2010-01-05 10:21:45

Ubuntu硬盤

2023-10-06 00:04:02

2018-09-04 16:20:46

MySQ索引數(shù)據(jù)結(jié)構(gòu)

2010-06-23 20:31:54

2010-07-13 09:36:25

2020-09-21 09:53:04

FlexCSS開發(fā)

2009-08-25 16:27:10

Mscomm控件

2010-11-19 16:22:14

Oracle事務(wù)

2022-08-26 13:48:40

EPUBLinux

2020-07-20 06:35:55

BashLinux

2010-10-15 11:27:21

Mysql臨時(shí)表

2010-11-22 11:09:00

MySQL索引類型

2010-10-12 15:30:04

MySQL權(quán)限管理

2010-10-15 15:32:06

Mysql外部鎖定

2010-10-14 11:33:42

MySQL用戶

2010-10-09 14:08:52

MYSQL Cast函

2010-10-11 16:45:18

MySQL ifnul

2010-10-14 11:25:39

2018-09-26 11:12:35

iOS蘋果功能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

丝袜美腿诱惑一区二区三区| 免费看av毛片| 夜间精品视频| 亚洲国产一区二区三区在线观看 | 欧美高清性hdvideosex| 日韩欧美视频免费在线观看| 日本大片在线观看| 激情综合网最新| 性色av一区二区咪爱| 少妇愉情理伦三级| 精品久久对白| 这里只有精品99re| 日韩av播放器| 成人免费高清观看| 中文字幕一区二区三区在线不卡| 精品网站在线看| 国产激情久久久久久熟女老人av| 亚洲永久免费精品| 欧美激情视频免费观看| 国产白丝一区二区三区| 久久悠悠精品综合网| 欧美精品亚洲二区| 不卡av免费在线| 国产伦久视频在线观看| 亚洲欧美日韩国产手机在线| 日本成人三级| 污视频在线免费| 国产精选一区二区三区| 国产精品日日摸夜夜添夜夜av| 国产一级特黄a高潮片| 色综合咪咪久久网| 亚洲人成电影网站色| 国产美女视频免费观看下载软件| 中文成人在线| 欧美日韩精品一区二区三区四区 | 精品一二三四区| 国产成人激情视频| www欧美在线| 一区视频在线| 欧美大荫蒂xxx| 小向美奈子av| 色小子综合网| 日韩在线观看免费网站| 久久午夜精品视频| 日韩av自拍| 最近2019中文字幕mv免费看| 91成人破解版| 国产亚洲欧美日韩在线观看一区二区 | 免费亚洲网站| 91av在线免费观看| 天堂网一区二区三区| 国产欧美日韩综合一区在线播放 | 中韩乱幕日产无线码一区| 日韩欧美亚洲综合| 九色porny91| 超薄肉色丝袜脚交一区二区| 在线亚洲高清视频| 日韩一级理论片| yiren22亚洲综合| 欧美色网一区二区| 国产高清999| 国产一区二区三区| 日韩欧美亚洲一区二区| 免费黄色a级片| 久久国产精品色av免费看| 亚洲黄色有码视频| 欧美偷拍一区二区三区| 日韩精品永久网址| 久久在线视频在线| 久久久久久国产精品视频| 激情欧美国产欧美| 国产91在线播放| 中文字幕av影视| 国产一区二区看久久| http;//www.99re视频| 蜜臀av午夜精品| 国产午夜亚洲精品午夜鲁丝片| 午夜老司机精品| 成人黄色网址| 午夜视频久久久久久| 欧美少妇性生活视频| 国产在视频一区二区三区吞精| 69久久夜色精品国产69蝌蚪网| wwwxxxx在线观看| 亚洲免费福利一区| 色777狠狠综合秋免鲁丝| 黄色一级视频在线观看| 先锋a资源在线看亚洲| 国产精品美女主播| 午夜久久久久久久久久| 久久精品人人做人人综合 | 奇米精品在线| 黄a在线观看| 欧美日韩精品国产| av在线免费看片| 露出调教综合另类| www.日韩视频| 国产69精品久久久久久久久久| 日韩av中文在线观看| 国产精品12| 在线国产91| 日韩欧美在线看| 久草福利在线观看| av中文一区| 国语自产精品视频在线看抢先版图片| 做爰无遮挡三级| av一区二区三区黑人| 国产精品亚洲天堂| 日本欧美日韩| 亚洲国语精品自产拍在线观看| 国产日产在线观看| 久久一综合视频| 国产精品theporn88| 日本视频不卡| 色老汉一区二区三区| 日本精品一二三区| 亚洲精品一二三区区别| 国产福利成人在线| 亚洲 欧美 激情 另类| 亚洲人成亚洲人成在线观看图片| 国产真实乱子伦| 国产精品男女| 久久99久久99精品免观看粉嫩| 中文在线免费观看| 久久久午夜精品| 欧美在线一区视频| 波多野结衣在线一区二区 | 国产一区二区福利视频| 亚洲一区二区三区加勒比| 周于希免费高清在线观看| 精品国产91亚洲一区二区三区婷婷| 日本美女黄色一级片| 日韩黄色一级片| 欧美午夜精品理论片a级大开眼界| ririsao久久精品一区| 日韩欧美一二三四区| 中文字幕亚洲欧美日韩| 狠狠色2019综合网| 99re99热| 精品国产不卡一区二区| 久久久97精品| 97人妻精品一区二区三区| 国产精品黄色在线观看| 亚洲欧美久久久久| 日韩毛片视频| 国产免费成人av| 天堂аⅴ在线地址8| 欧美日本国产视频| 免费黄色激情视频| 国产一区二区三区四| 影音先锋在线亚洲| 欧美午夜在线播放| 欧美国产日韩一区二区在线观看| 午夜精品久久久久久久99| 亚洲一线二线三线视频| 免费黄色a级片| 亚洲一区亚洲| 色视频一区二区三区| 巨胸喷奶水www久久久免费动漫| 自拍偷拍亚洲一区| 国产精品自产拍| 一个色妞综合视频在线观看| 欲求不满的岳中文字幕| 免费视频久久| 伊人久久99| 亚洲高清999| 2019最新中文字幕| 91亚洲欧美| 91精品国产91热久久久做人人| 青青草原免费观看| 91麻豆免费看片| 中文字幕视频在线免费观看| 亚洲国产精品久久久天堂| 粉嫩精品一区二区三区在线观看 | 亚洲成人精品| 国产精品一码二码三码在线| 涩涩在线视频| 日韩在线视频观看| 免费a视频在线观看| 欧美性xxxxx极品娇小| 久久久免费看片| 国产成人精品aa毛片| 欧美日韩第二页| 99免费精品| 久久超碰亚洲| www久久久| 51精品在线观看| 欧美r级在线| 日韩电视剧在线观看免费网站| 啪啪小视频网站| 亚洲午夜久久久久久久久电影网| 免费毛片视频网站| 国产老妇另类xxxxx| 日韩 欧美 高清| 国产精品啊啊啊| 亚洲精品久久区二区三区蜜桃臀 | 99久久精品情趣| 久久国产这里只有精品| 夜久久久久久| av不卡在线免费观看| 免费黄色成人| 草莓视频一区| 97精品国产综合久久久动漫日韩 | 91xxx视频| 蜜臀av免费一区二区三区| 91在线免费视频| 日韩一区二区三区免费| 午夜精品久久久久久久99黑人| 黄网页免费在线观看| 亚洲欧美在线一区| 亚洲男人天堂久久| 91麻豆精品91久久久久同性| 国产一级免费视频| 亚洲.国产.中文慕字在线| 成人免费精品动漫网站| 国产精品乱码一区二区三区软件 | 热久久这里只有| 黄色在线观看视频网站| 久久精品在线播放| freemovies性欧美| 亚洲精品中文字幕av| 欧美天堂在线视频| 欧美tk—视频vk| 国产精品久久777777换脸| 在线观看免费一区| 日本高清不卡码| 欧美日韩国产丝袜另类| 国产第100页| 亚洲成人av一区二区| 欧美毛片在线观看| 一区二区久久久久| 欧美黄色一级网站| 亚洲美女一区二区三区| 99视频只有精品| 亚洲欧美日韩国产另类专区| 在线观看亚洲网站| 亚洲欧美色一区| 中日韩一级黄色片| 亚洲三级久久久| 人妻久久一区二区| 亚洲在线视频一区| 久久久久久久久久久久久久免费看| 亚洲欧美日韩系列| 欧美日韩在线视频免费播放| 亚洲视频免费观看| 一区二区成人免费视频| 亚洲免费av高清| 久草免费在线视频观看| 亚洲成人综合视频| 欧美一级视频免费观看| 色综合久久88色综合天天6| 伊人中文字幕在线观看 | 97国产精品免费视频| www.超碰在线| 日本免费久久高清视频| 97欧美成人| 成人日韩在线电影| 91综合精品国产丝袜长腿久久| 国产精品一区二区三区免费| 色天下一区二区三区| 欧美色图亚洲自拍| 日韩精品欧美| 日韩精品免费一区| 亚洲美女91| 亚洲精品视频导航| 国产伦精品一区二区三区视频青涩 | 北条麻妃av高潮尖叫在线观看| 麻豆久久久久久久| av影片在线播放| 91麻豆国产福利在线观看| 黄免费在线观看| 日韩美女视频一区二区 | 污影院在线观看| 91国产美女视频| 欧美成人精品三级网站| 91久久精品国产| 美国一区二区| 亚洲欧洲日韩精品| 狠狠久久婷婷| 日本免费观看网站| 成人午夜在线免费| 亚洲av熟女国产一区二区性色| 亚洲美女一区二区三区| 一级黄色免费网站| 欧美一区二区在线播放| 午夜影院免费体验区| 日韩网站免费观看高清| 交100部在线观看| 国产一区视频在线| 久久综合社区| 自拍偷拍亚洲色图欧美| 国产精品普通话对白| 九九热精品国产| 久久尤物电影视频在线观看| 黄色香蕉视频在线观看| 色女孩综合影院| 亚洲精品无遮挡| 这里只有精品视频在线| 国产黄大片在线观看| 91精品久久久久久久久青青| 少妇高潮一区二区三区| 福利网在线观看| 天堂成人国产精品一区| 国产情侣久久久久aⅴ免费| 国产精品久久久久久久久果冻传媒| 国产成人在线观看网站| 91精品欧美久久久久久动漫| 国产主播福利在线| 97碰在线观看| 欧美日韩黄网站| 国产四区在线观看| 日本大胆欧美人术艺术动态 | 国产 日韩 欧美 精品| 自拍亚洲一区欧美另类| 桃花岛成人影院| 国语精品免费视频| 国产精品mm| 69久久精品无码一区二区| 中文字幕免费观看一区| 老熟妇仑乱一区二区av| 亚洲精品成人久久电影| 草美女在线观看| 粉嫩av四季av绯色av第一区| 91精品啪在线观看国产18 | 欧美一级网址| 日韩中文字幕av在线| 性伦欧美刺激片在线观看| 99热超碰在线| 亚洲综合激情网| 亚洲精品国偷拍自产在线观看蜜桃| 久久国产一区二区三区| 国产精品美女午夜爽爽| 视频一区二区三区在线观看| 丝瓜av网站精品一区二区| 四虎影成人精品a片| 粉嫩老牛aⅴ一区二区三区| 全国男人的天堂网| 国模吧一区二区三区| 老司机成人在线| 能在线观看的av| 久久九九影视网| 亚洲中文字幕无码爆乳av| 亚洲无线码在线一区观看| 亚洲天堂一区二区| 色狠狠久久av五月综合|| 日本不卡一区二区三区 | 青青草视频在线观看| 97精品一区二区三区| 亚洲精品456| 国产v亚洲v天堂无码久久久| 国产视频视频一区| 在线免费av网| 两个人的视频www国产精品| 欧美中文高清| 日本中文字幕在线视频观看| av资源站一区| 国产伦精品一区二区三区视频我| 亚洲人成啪啪网站| 91精品国产经典在线观看| 黄瓜视频免费观看在线观看www| 国产美女精品在线| 日韩美女视频网站| 亚洲欧美日韩国产精品| 成人在线观看免费视频| 久久久成人精品一区二区三区| 国产精品亚洲专一区二区三区| 国产黄色片视频| 亚洲欧美制服中文字幕| 亚洲二区av| 国产精品专区在线| 国产欧美综合在线观看第十页| 国产精品玖玖玖| 久久久久国产一区二区三区| 日韩精品免费一区二区三区竹菊 | 特级毛片www| 色婷婷av一区二区三区在线观看| 视频一区日韩精品| 国产偷人视频免费| 亚洲另类中文字| 天堂a√在线| 国产日韩在线观看av| 一区在线播放| 日本二区三区视频| 日韩第一页在线| 国产精品视频一区二区三区| 波多野结衣家庭教师在线播放| 国产精品女上位| 日韩在线视频观看免费| 国产精品免费视频xxxx| 伊人久久大香线蕉av超碰演员| 一区二区三区伦理片| 日韩欧美高清dvd碟片| 欧美电影免费看| www.日本在线视频| 中文在线一区二区| 日本免费网站在线观看| 成人午夜高潮视频| 久久综合影视| 日本熟女一区二区| 久久在线视频在线|