精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

97在线免费公开视频| 国产精品久久久久久久一区探花| 中文字幕资源在线观看| 欧美人与性动交α欧美精品济南到| 国产电影一区在线| 91成人在线播放| 日韩影视一区二区三区| 视频二区欧美| 色婷婷久久99综合精品jk白丝| 亚洲欧洲一区二区福利| 国精产品一品二品国精品69xx | 在线免费a视频| 伊人成年综合电影网| 亚洲视频在线视频| 久久aaaa片一区二区| 日韩美女在线看免费观看| 国产精品久久久久久久久动漫| 成人av网站观看| 波多野结衣绝顶大高潮| 国产精品av一区二区| 国产亚洲美女久久| www.美色吧.com| 免费成人黄色网| 欧美日韩国产中字| 免费的av在线| 国产中文字幕在线播放| 国产69精品久久777的优势| 国产亚洲在线| 欧美最猛黑人xxxxx猛交| 美女av免费观看| jzzjzzjzz亚洲成熟少妇| gogo大胆日本视频一区| 97se亚洲综合| 国产精品女人久久久| 日韩影院在线观看| 8x拔播拔播x8国产精品| 精品无码av在线| 久久久久午夜电影| 中文字幕v亚洲ⅴv天堂| 全黄一级裸体片| 国产精品久久久久av蜜臀| 日韩一级黄色大片| 手机免费av片| av免费在线一区| 欧美三级免费观看| 内射国产内射夫妻免费频道| 日韩三级电影视频| 亚洲免费观看高清完整版在线观看熊 | 国产专区综合网| 国产美女直播视频一区| 青青青国产在线| 国产视频一区三区| 高清欧美性猛交| 精品无码黑人又粗又大又长| 国产精品激情| 欧美激情在线观看视频| 久久久www成人免费毛片| 中文精品电影| 色综合视频网站| 久久久无码一区二区三区| 欧美日韩国产一区精品一区| 不卡av在线网站| 欧美日韩免费一区二区| 欧美日韩亚洲一区二区三区在线| 久久艳片www.17c.com | 黄色的视频在线免费观看| 91色在线porny| 久久久水蜜桃| 国产在线你懂得| 中文字幕 久热精品 视频在线| 日韩国产伦理| 精品孕妇一区二区三区| 亚洲蜜桃精久久久久久久| 成人av在线播放观看| av有码在线观看| 欧美性少妇18aaaa视频| 无码内射中文字幕岛国片| 欧美free嫩15| 91精品国产丝袜白色高跟鞋| 日本少妇一级片| 日韩成人一级| 农村妇女一区二区| 91福利社在线观看| 91国产精品视频在线观看| 久久亚洲国产精品尤物| 日韩精品最新网址| 玖玖爱在线精品视频| 国产欧美日韩视频在线| 久久久av网站| 国产精品第108页| 日韩国产高清在线| 亚洲综合中文字幕在线观看| 天天操天天舔天天干| 日本一区二区免费在线观看视频 | 欧美日本一区| 日本精品视频在线| 一级特黄录像免费看| 成人av电影在线观看| 天堂精品视频| h片在线观看| 欧美日韩综合不卡| 国模无码视频一区| 爽成人777777婷婷| 国内偷自视频区视频综合| 亚洲天堂视频在线播放| 成人午夜在线免费| 翔田千里亚洲一二三区| а√天堂中文在线资源8| 欧美少妇bbb| 你懂得在线视频| 国产精品久久久久9999赢消| 国产91精品高潮白浆喷水| 国产精品午夜福利| 久久久久国色av免费看影院| 人妻av无码专区| 欧美成a人片免费观看久久五月天| 亚洲国产欧美一区二区三区同亚洲 | 欧美放荡办公室videos4k| 亚洲色成人www永久网站| 成人永久看片免费视频天堂| 亚洲综合首页| 亚洲国产福利| 亚洲第一天堂av| 成人在线观看小视频| 日韩中文字幕亚洲一区二区va在线| 国产精品二区在线| 国产二区三区在线| 欧美色男人天堂| 在哪里可以看毛片| 国产欧美在线| 激情五月综合色婷婷一区二区 | 国产91免费看| 亚洲美女屁股眼交| 五月天视频在线观看| 欧美熟乱15p| 国产成人avxxxxx在线看| 涩涩视频免费看| 亚洲亚洲人成综合网络| 国产成人av免费观看| 91精品啪在线观看国产81旧版| 国产精品xxxxx| 九色国产在线观看| 欧美日韩一区二区在线| 性色av蜜臀av浪潮av老女人| 欧美体内she精视频在线观看| 91在线|亚洲| 黄av在线播放| 67194成人在线观看| 永久免费未视频| 韩国一区二区视频| 一区二区三区我不卡| 欧美高清xxx| 日日摸夜夜添一区| 伊人成人在线观看| 国产日韩欧美综合一区| 91日韩视频在线观看| 亚洲最好看的视频| 欧美在线日韩在线| 免费国产在线视频| 在线观看欧美黄色| 女人裸体性做爰全过| av片在线免费观看| 精品一区免费av| 一区二区精品免费视频| 伊人国产精品| 久久久在线观看| 先锋av资源站| 91成人网在线| 久久精品在线观看视频| 国产一区91精品张津瑜| www.xxx麻豆| 亚洲福利网站| 国产日韩欧美在线| 成人影院www在线观看| 日韩美一区二区三区| 日韩成人免费观看| 久久九九久久九九| 天天干天天操天天做| 你懂的一区二区| 超碰国产精品久久国产精品99| 华人av在线| 中文字幕日本精品| 99久久精品国产色欲| 亚洲国产一二三| 黄色正能量网站| 理论电影国产精品| 久久在线中文字幕| 欧美精选一区二区三区| 51国偷自产一区二区三区| 末成年女av片一区二区下载| 在线电影中文日韩| www久久久com| 欧美性xxxxx极品少妇| 欧美精品xxxxx| 国产亚洲精品中文字幕| 奇米777在线| 亚洲女优在线| 99久久99久久精品| 精品国产一区二区三区四区 | 欧美另类精品xxxx孕妇| 熟妇高潮一区二区高潮| 精品视频123区在线观看| 国产真实乱偷精品视频| 国产精品毛片无遮挡高清| 国产高潮失禁喷水爽到抽搐| 日韩精品乱码av一区二区| 欧美大黑帍在线播放| 日韩久久视频| 久久久久久艹| 视频一区在线| 国产啪精品视频| 深夜在线视频| 久久久久久国产| 欧美三级理伦电影| 亚洲人成网站999久久久综合| 99久久久国产精品无码免费| 91国偷自产一区二区三区观看 | 亚洲精品一二三四区| 免费中文字幕av| 岛国av在线一区| 日本美女视频一区| 日韩成人精品在线| 少妇高潮喷水在线观看| 欧美激情综合| 欧美午夜精品久久久久久蜜| 高潮按摩久久久久久av免费| 91美女高潮出水| 韩国精品视频在线观看| 国产91精品网站| 蜜桃av在线| 国内精品一区二区三区四区| 亚洲图区一区| 久久色在线播放| 免费在线看a| 中文字幕久久亚洲| 国产精品视频二区三区| 亚洲欧美日韩天堂| 欧美精品久久久久久久久久丰满| 亚洲成avwww人| www.午夜激情| 精品99999| 丰满人妻一区二区三区无码av| 91精品国产综合久久精品| 96日本xxxxxⅹxxx17| 欧美图片一区二区三区| 伊人免费在线观看高清版| 欧美亚洲日本国产| 国产综合视频在线观看| 黄色片免费在线| 亚洲欧美在线一区| 欧美黄色小说| 亚洲最大在线视频| av在线免费观看网| 中文欧美日本在线资源| 91社区在线观看| 中文字幕一区二区精品| 日本免费在线视频| 久久精品国产亚洲精品2020| 九色porny在线| 萌白酱国产一区二区| 欧美人体视频xxxxx| 欧美激情一区二区三级高清视频| 大香伊人久久| 2019中文字幕在线免费观看| 欧美成人免费电影| 国产精品一区二区三区在线播放| 日韩av黄色| 成人xxxxx色| 欧洲亚洲成人| 色女人综合av| 综合一区av| 日本中文字幕网址| 日韩专区中文字幕一区二区| 国产三级生活片| 国产精品69毛片高清亚洲| 国产伦精品一区二区三区精品| 91麻豆swag| 五月天免费网站| 一区二区高清视频在线观看| 丰满少妇乱子伦精品看片| 欧美在线啊v一区| 国产强被迫伦姧在线观看无码| 欧美大肚乱孕交hd孕妇| 日本视频在线观看一区二区三区| 在线观看久久久久久| 综合久久2019| 欧美中文字幕视频在线观看| 视频91a欧美| 国产一区二区精品免费| 精品日本12videosex| 丰满人妻一区二区三区53号| 亚洲视频播放| 中文字幕视频三区| 99久久精品免费精品国产| 91香蕉国产视频| 午夜久久久久久电影| 这里只有精品9| 亚洲国产美女久久久久| 超碰在线无需免费| 555www成人网| 国产精品亚洲四区在线观看| 久久久久久久久久久久久久一区| 国产精品x453.com| 妺妺窝人体色www在线小说| 精品一区二区久久| 美国黄色一级毛片| 一区二区三区在线视频观看58| 日韩 国产 欧美| 精品处破学生在线二十三| 日本三级在线播放完整版| 欧洲日本亚洲国产区| 精品国产乱码久久久久久樱花| 欧美国产一二三区| 精品91在线| 91视频福利网| 亚洲国产精品成人综合| 欧美日韩乱国产| 欧美精品一区视频| 黄网站免费在线播放| 国产精品久久久久久久久久免费 | 成人观看网址| 91亚洲精品久久久| 操欧美老女人| 日本精品久久久久中文字幕| 成人av资源站| 成人免费看片98| 日韩一区二区三免费高清| 色网站在线看| 国产精品入口夜色视频大尺度| 西野翔中文久久精品字幕| 人人干视频在线| 懂色av中文一区二区三区 | 色天堂在线视频| 久久久久久久国产| 亚洲一区网址| 波多野结衣 作品| 国产精品一区二区三区网站| 久久99久久99精品免费看小说| 欧美日韩一区二区三区四区| 精品电影在线| 国产精品扒开腿做爽爽爽视频| 亚洲女娇小黑人粗硬| 精品久久一二三| av资源网一区| 中文字幕在线字幕中文| 亚洲精品国精品久久99热| 1区2区3区在线| 国产欧美日韩另类视频免费观看| 中文字幕精品视频在线| 亚洲第一搞黄网站| 丰满熟妇乱又伦| 韩国美女主播一区| 天堂99x99es久久精品免费| 美女av免费在线观看| 久久丝袜美腿综合| 一级黄色av片| 中文字幕日韩欧美在线视频| 久久91视频| 特级黄色录像片| 国产精品123区| 精品无码人妻一区二区三| 日韩成人av网址| 色香欲www7777综合网| 日韩精品不卡| 国产一区美女在线| 国产亚洲欧美精品久久久www| 亚洲国产成人91精品| 欧美成人黑人| 制服诱惑一区| 成人综合激情网| 精人妻无码一区二区三区| 色婷婷综合久久久久| 亚洲日本va| 欧美亚洲国产成人| 国产精品乱人伦中文| 精品人妻无码一区二区| **欧美日韩vr在线| 日韩1区2区| 亚洲少妇一区二区| 欧美性猛交xxxx免费看久久久| 婷婷在线视频| 国产女人水真多18毛片18精品| 视频一区中文字幕| 天天鲁一鲁摸一摸爽一爽| 亚洲精品按摩视频| 国内精品伊人| 欧美日韩黄色一级片| 中文字幕在线免费不卡| 欧洲精品久久一区二区| 国产精品都在这里| 91久久国产综合久久91猫猫| 欧美日韩视频专区在线播放| 欧美精品久久久久久久久久丰满| 国产一区二区香蕉| 亚洲精选国产| 午夜国产福利视频| 日韩精品视频在线播放| 99精品女人在线观看免费视频| 国产99久久九九精品无码| 国产精品美女久久久久aⅴ|