GaussDB資料型別介紹

語言: CN / TW / HK

 

文章目錄

  • 一、GaussDB 資料庫
  • 二、資料型別概念及特點
  • 三、常用資料型別
    • 1、常用字串型別介紹
    • 2、布林型別
    • 3、數值型別
    • 4、日期/時間型別
  • 四、資料型別選擇建議

 

一、GaussDB 資料庫

GaussDB是華為基於openGauss自研生態推出的雲化企業級分散式關係型資料庫,它支援多種資料型別,包括數值、字元、日期等。在使用GaussDB時,可能需要進行資料型別轉換,以滿足不同的需求。本文將以示例的形式羅列並介紹一些常見的資料型別轉換方法等。

二、資料型別概念及特點

資料型別是一組值的集合以及定義在這個值集上的一組操作。GaussDB資料庫是由表的集合組成的,而各表中的列定義了該表,每一列都屬於一種資料型別,GaussDB根據資料型別有相應函式對其內容進行操作,例如GaussDB可對數值型資料進行加、減、乘、除操作等。

資料型別是用來定義資料儲存格式和資料範圍的規範。每種資料型別都有自己的特點和適用範圍,它們在資料庫中的作用主要有以下幾點:

  • 儲存資料:資料庫中的每個欄位都必須指定資料型別,這樣才能確定它們在資料庫中的儲存格式。不同的資料型別使用不同的儲存方式,例如整型會以二進位制形式儲存,而字元型則以ASCII碼或Unicode編碼形式儲存。
  • 約束資料範圍:資料型別可以限制某個欄位儲存的資料範圍,例如整型只能儲存整數值,小數型只能儲存浮點數等。這樣可以確保資料的準確性和完整性,防止非法值進入資料庫。
  • 提高查詢效率:資料庫在查詢資料時會根據欄位的資料型別進行優化,例如對整型欄位的查詢會比對字元型欄位的查詢更快,因為整型欄位的資料儲存格式更簡單,計算也更快。
  • 降低儲存空間:不同的資料型別使用不同的儲存方式,一些資料型別可以在儲存時減少儲存空間的佔用。例如使用整型可以減少儲存空間的佔用,因為整型在儲存時只需要佔用4個位元組,而字元型則需要佔用更多的儲存空間。
  • 提高資料安全性:資料型別可以幫助資料庫對資料進行有效的過濾和驗證,限制不合法的資料輸入,增強資料的安全性和可靠性。

綜上所述,資料型別在資料庫中扮演著極為重要的角色,它們不僅僅用於儲存資料,還可以提高查詢效率、降低儲存空間、提高資料安全性等。資料庫開發人員在設計資料庫時必須充分了解各種資料型別的特點和使用場景,合理選用資料型別,才能保證資料庫的高效性和穩定性。

三、常用資料型別

1、常用字串型別介紹

在進行欄位設計時,需要根據資料特徵選擇相應的資料型別。字串型別在使用時比較容易混淆,下表羅列了GaussDB中常見的字串型別。
1)常用字串型別

2)示例

--建立表。
CREATE TABLE t_char_type
(
  column1 VARCHAR(5)
)DISTRIBUTE BY HASH (column1);

--插入資料。
INSERT INTO t_char_type VALUES ('ok');

--插入的資料長度超過型別規定的長度報錯。
INSERT INTO t_char_type VALUES ('too long');
ERROR:  value too long for type character varying(5)
CONTEXT:  referenced column: column1

--明確型別的長度,超過資料型別長度後會自動截斷。
INSERT INTO t_char_type VALUES ('too long'::varchar(5));

--查詢資料。
SELECT column1, char_length(column1) FROM t_char_type;
 column1 | char_length 
---------+-------------
 ok      |           2
 too l   |           5
(2 rows)

2、布林型別

1)說明
“真”值的有效文字值是:
TRUE、‘t’、‘true’、‘y’、‘yes’、'1’以及所有非0整數。
“假”值的有效文字值是:
FALSE、‘f’、‘false’、‘n’、‘no’、‘0’、0。
使用TRUE和FALSE是比較規範的用法(也是SQL相容的用法)。

2)示例

--建立表。
CREATE TABLE t_bool_type  
(
    column1 BOOLEAN,
    column2 TEXT
)DISTRIBUTE BY HASH(column2);

--插入資料。
INSERT INTO t_bool_type VALUES (TRUE, 'one');
INSERT INTO t_bool_type VALUES (FALSE, 'two');

--檢視資料。
SELECT * FROM t_bool_type;
 column1 | column2 
---------+---------
 t       | one
 f       | two
(2 rows)

SELECT * FROM t_bool_type WHERE column1 = 't';
 column1 | column2 
---------+---------
 t       | one
(1 row)

3、數值型別

1) 整數型別

  • TINYINT、SMALLINT、INTEGER和BIGINT型別儲存各種範圍的數字,也就是整數。試圖儲存超出範圍以外的數值將會導致錯誤。
  • 常用的型別是INTEGER,因為它提供了在範圍、儲存空間、效能之間的最佳平衡。一般只有取值範圍確定不超過SMALLINT的情況下,才會使用SMALLINT型別。而只有在INTEGER的範圍不夠的時候才使用BIGINT,因為前者相對快得多。

2)示例

--建立具有TINYINT,INTEGER,BIGINT型別資料的表。
openGauss=# CREATE TABLE t_int_type
(
    column1 TINYINT, 
    column2 TINYINT,
    column3 INTEGER,
    column4 BIGINT
);

--插入資料。
openGauss=# INSERT INTO int_type_t2 VALUES(100, 10, 1000, 10000);

--檢視資料。
openGauss=# SELECT * FROM int_type_t2;
 column1  | column2  | column3   | column4   
-----------+----------+------------+-------
 100       | 10       | 1000      | 10000
(1 row)

4、日期/時間型別

1)日期輸入說明:日期和時間的輸入幾乎可以是任何合理的格式,包括ISO-8601格式、SQL-相容格式、傳統POSTGRES格式或者其它的形式。系統支援按照日、月、年的順序自定義日期輸入。如果把DateStyle引數設定為MDY就按照“月-日-年”解析,設定為DMY就按照“日-月-年”解析,設定為YMD就按照“年-月-日”解析。
日期的文字輸入需要加單引號包圍,語法:type [ ( p ) ] ‘value’,可選的精度宣告中的p是一個整數,表示在秒域中小數部分的位數。

2)時間段輸入說明:reltime的輸入方式可以採用任何合法的時間段文字格式,包括數字形式(含負數和小數)及時間形式,其中時間形式的輸入支援SQL標準格式、ISO-8601格式、POSTGRES格式等。另外,文字輸入需要加單引號。

四、資料型別選擇建議

選擇資料型別,在欄位設計時,基於查詢效率的考慮,一般遵循以下原則:

  • 選擇數值型別時,在滿足業務精度的情況下,選擇資料型別的優先順序從高到低依次為整數、浮點數、NUMERIC。
  • 使用一致的資料型別,當多個表存在邏輯關係時,表示同一含義的欄位應該使用相同的資料型別。
  • 對於字串資料,建議使用變長字串資料型別,並指定最大長度。請務必確保指定的最大長度大於需要儲存的最大字元數,避免超出最大長度時出現字元截斷現象。除非明確知道資料型別為固定長度字串,否則,不建議使用CHAR(n)、BPCHAR(n)、NCHAR(n)、CHARACTER(n)。
  • 索引欄位的總長度不超過50位元組。否則,索引大小會膨脹比較嚴重,帶來較大的儲存開銷,同時索引效能也會下降。
  • 儘量使用執行效率比較高的資料型別,一般來說整型資料運算(包括=、>、<、≧、≦、≠等常規的比較運算,以及group by)的效率比字串、浮點數要高。比如某客戶場景中對列存表進行點查詢,filter條件在一個numeric列上,執行時間為10+s;修改numeric為int型別之後,執行時間縮短為1.8s左右。
  • 儘量使用短欄位的資料型別:長度較短的資料型別不僅可以減小資料檔案的大小,提升IO效能;同時也可以減小相關計算時的記憶體消耗,提升計算效能。比如對於整型資料,如果可以用smallint就儘量不用int,如果可以用int就儘量不用bigint。
  • 表關聯列儘量使用相同的資料型別。如果表關聯列資料型別不同,資料庫必須動態地轉化為相同的資料型別進行比較,這種轉換會帶來一定的效能開銷。

附:GaussDB資料庫涉及的資料型別
“數值型別、貨幣型別、布林型別、字元型別、二進位制型別、日期/時間型別、幾何型別、網路地址型別、位串型別、文字搜尋型別、UUID型別、JSON/JSONB型別、HLL資料型別、範圍型別、物件識別符號型別、偽型別、列存表支援的資料型別、賬本資料庫使用的資料型別”。

詳見官方文件:http://support.huaweicloud.com/intl/zh-cn/opengauss/index.html

以上就是本期的內容,歡迎大家測試、交流!