五月婷婷丁香性爱|j久久一级免费片|久久美女福利视频|中文观看在线观看|加勒比四区三区二|亚洲裸女视频网站|超碰97AV在线69网站免费观看|有码在线免费视频|久久青青日本视频|亚洲国产AAAA

云數(shù)據(jù)庫GaussDB創(chuàng)建和管理索引

背景信息

索引可以提高數(shù)據(jù)的訪問速度,但同時也增加了插入、更新和刪除操作的處理時間。所以是否要為表增加索引,索引建立在哪些字段上,是創(chuàng)建索引前必須要考慮的問題。需要分析應用程序的業(yè)務處理、數(shù)據(jù)使用、經(jīng)常被用作查詢的條件或者被要求排序的字段來確定是否建立索引。

索引建立在數(shù)據(jù)庫表中的某些列上。因此,在創(chuàng)建索引時,應該仔細考慮在哪些列上創(chuàng)建索引。

1.在經(jīng)常需要搜索查詢的列上創(chuàng)建索引,可以加快搜索的速度。

2.在作為主鍵的列上創(chuàng)建索引,強制該列的唯一性和組織表中數(shù)據(jù)的排列結構。

3.在經(jīng)常使用連接的列上創(chuàng)建索引,這些列主要是一些外鍵,可以加快連接的速度。

4.在經(jīng)常需要根據(jù)范圍進行搜索的列上創(chuàng)建索引,因為索引已經(jīng)排序,其指定的范圍是連續(xù)的。

5.在經(jīng)常需要排序的列上創(chuàng)建索引,因為索引已經(jīng)排序,這樣查詢可以利用索引的排序,加快排序查詢時間。

6.在經(jīng)常使用WHERE子句的列上創(chuàng)建索引,加快條件的判斷速度。

7.為經(jīng)常出現(xiàn)在關鍵字ORDER BY、GROUP BY、DISTINCT后面的字段建立索引。

說明:索引創(chuàng)建成功后,系統(tǒng)會自動判斷何時引用索引。當系統(tǒng)認為使用索引比順序掃描更快時,就會使用索引。

索引創(chuàng)建成功后,必須和表保持同步以保證能夠準確地找到新數(shù)據(jù),這樣就增加了數(shù)據(jù)操作的負荷。因此請定期刪除無用的索引。

云數(shù)據(jù)庫GaussDB創(chuàng)建索引操作步驟

創(chuàng)建分區(qū)表的步驟請參考創(chuàng)建和管理分區(qū)表。

創(chuàng)建索引

?創(chuàng)建分區(qū)表索引tpcds_web_returns_p2_index1,不指定索引分區(qū)的名稱。

openGauss=# CREATE INDEX tpcds_web_returns_p2_index1 ON tpcds.web_returns_p2 (ca_address_id) LOCAL;

當結果顯示為如下信息,則表示創(chuàng)建成功。

CREATE INDEX

?創(chuàng)建分區(qū)表索引tpcds_web_returns_p2_index2,并指定索引分區(qū)的名稱。

openGauss=# CREATE INDEX tpcds_web_returns_p2_index2 ON tpcds.web_returns_p2 (ca_address_sk) LOCAL

( PARTITION web_returns_p2_P1_index,

   PARTITION web_returns_p2_P2_index TABLESPACE example3,

   PARTITION web_returns_p2_P3_index TABLESPACE example4,

   PARTITION web_returns_p2_P4_index,

   PARTITION web_returns_p2_P5_index,

   PARTITION web_returns_p2_P6_index,

   PARTITION web_returns_p2_P7_index,

   PARTITION web_returns_p2_P8_index ) TABLESPACE example2;

當結果顯示為如下信息,則表示創(chuàng)建成功。

CREATE INDEX

修改索引分區(qū)的表空間

?修改索引分區(qū)web_returns_p2_P2_index的表空間為example1。

openGauss=# ALTER INDEX tpcds.tpcds_web_returns_p2_index2 MOVE PARTITION web_returns_p2_P2_index TABLESPACE example1;

當結果顯示為如下信息,則表示修改成功。

ALTER INDEX

?修改索引分區(qū)web_returns_p2_P3_index的表空間為example2。

openGauss=# ALTER INDEX tpcds.tpcds_web_returns_p2_index2 MOVE PARTITION web_returns_p2_P3_index TABLESPACE example2;

當結果顯示為如下信息,則表示修改成功。

ALTER INDEX

重命名索引分區(qū)

執(zhí)行如下命令對索引分區(qū)web_returns_p2_P8_index重命名web_returns_p2_P8_index_new。

openGauss=# ALTER INDEX tpcds.tpcds_web_returns_p2_index2 RENAME PARTITION web_returns_p2_P8_index TO web_returns_p2_P8_index_new;

當結果顯示為如下信息,則表示重命名成功。

ALTER INDEX

查詢索引

?執(zhí)行如下命令查詢系統(tǒng)和用戶定義的所有索引。

openGauss=# SELECT RELNAME FROM PG_CLASS WHERE RELKIND='i';

?執(zhí)行如下命令查詢指定索引的信息。

openGauss=# \di+ tpcds.tpcds_web_returns_p2_index2

刪除索引

openGauss=# DROP INDEX tpcds.tpcds_web_returns_p2_index1;

openGauss=# DROP INDEX tpcds.tpcds_web_returns_p2_index2;

當結果顯示為如下信息,則表示刪除成功。

DROP INDEX

GaussDB支持4種創(chuàng)建索引的方式請參見表1-1。

說明:

索引創(chuàng)建成功后,系統(tǒng)會自動判斷何時引用索引。當系統(tǒng)認為使用索引比順序掃描更快時,就會使用索引。

索引創(chuàng)建成功后,必須和表保持同步以保證能夠準確地找到新數(shù)據(jù),這樣就增加了數(shù)據(jù)操作的負荷。因此請定期刪除無用的索引。

索引方式
描述

唯一索引

可用于約束索引屬性值的唯一性,或者屬性組合值的唯一性。如果一個表聲明了唯一約束或者主鍵,則GaussDB自動在組成主鍵或唯一約束的字段上創(chuàng)建唯一索引(可能是多字段索引),以實現(xiàn)這些約束。目前,GaussDB只有B-Tree及UBTree可以創(chuàng)建唯一索引。

多字段索引

一個索引可以定義在表中的多個屬性上。目前,GaussDB中的B-Tree支持多字段索引,且最多可在32個字段上創(chuàng)建索引。

部分索引

建立在一個表的子集上的索引,這種索引方式只包含滿足條件表達式的元組。

表達式索引

索引建立在一個函數(shù)或者從表中一個或多個屬性計算出來的表達式上。表達式索引只有在查詢時使用與創(chuàng)建時相同的表達式才會起作用。

云數(shù)據(jù)庫GaussDB創(chuàng)建表操作步驟

創(chuàng)建一個普通表

openGauss=# CREATE TABLE tpcds.customer_address_bak AS TABLE tpcds.customer_address;

INSERT 0 0

創(chuàng)建普通索引

如果對于tpcds.customer_address_bak表,需要經(jīng)常進行以下查詢。

openGauss=# SELECT ca_address_sk FROM tpcds.customer_address_bak WHERE ca_address_sk=14888;

通常,數(shù)據(jù)庫系統(tǒng)需要逐行掃描整個tpcds.customer_address_bak表以尋找所有匹配的元組。如果表tpcds.customer_address_bak的規(guī)模很大,但滿足WHERE條件的只有少數(shù)幾個(可能是零個或一個),則這種順序掃描的性能就比較差。如果讓數(shù)據(jù)庫系統(tǒng)在ca_address_sk屬性上維護一個索引,用于快速定位匹配的元組,則數(shù)據(jù)庫系統(tǒng)只需要在搜索樹上查找少數(shù)的幾層就可以找到匹配的元組,這將會大大提高數(shù)據(jù)查詢的性能。同樣,在數(shù)據(jù)庫中進行更新和刪除操作時,索引也可以提升這些操作的性能。

使用以下命令創(chuàng)建索引。

openGauss=# CREATE INDEX index_wr_returned_date_skON tpcds.customer_address_bak (ca_address_sk);

CREATE INDEX

創(chuàng)建唯一索引

在表tpcds.ship_mode_t1上的SM_SHIP_MODE_SK字段上創(chuàng)建唯一索引。

openGauss=# CREATE UNIQUE INDEX ds_ship_mode_t1_index1 ON tpcds.ship_mode_t1(SM_SHIP_MODE_SK);

創(chuàng)建多字段索引

假如用戶需要經(jīng)常查詢表tpcds.customer_address_bak中ca_address_sk是5050,且ca_street_number小于1000的記錄,使用以下命令進行查詢。

openGauss=# SELECT ca_address_sk,ca_address_idFROM tpcds.customer_address_bak WHEREca_address_sk = 5050 AND ca_street_number 1000;

使用以下命令在字段ca_address_sk和ca_street_number上定義一個多字段索引。

openGauss=# CREATE INDEX more_column_index ON tpcds.customer_address_bak(ca_address_sk ,ca_street_number );

CREATE INDEX

創(chuàng)建部分索引

如果只需要查詢ca_address_sk為5050的記錄,可以創(chuàng)建部分索引來提升查詢效率。

openGauss=# CREATE INDEX part_index ON tpcds.customer_address_bak(ca_address_sk) WHERE ca_address_sk = 5050;

CREATE INDEX

創(chuàng)建表達式索引

假如經(jīng)常需要查詢ca_street_number小于1000的信息,執(zhí)行如下命令進行查詢。

openGauss=# SELECT * FROM tpcds.customer_address_bakWHERE trunc(ca_street_number) 1000;

可以為上面的查詢創(chuàng)建表達式索引:

openGauss=# CREATE INDEX para_index ON tpcds.customer_address_bak (trunc(ca_street_number));

CREATE INDEX

刪除tpcds.customer_address_bak表

openGauss=# DROP TABLE tpcds.customer_address_bak;

DROP TABLE

云數(shù)據(jù)庫GaussDB索引約束

使用約束

索引使用滿足如下條件時:

1.在同一個表的同一個列上建立了多個gin索引;

2.這些gin索引使用了不同的parser(即分隔符不同);

3.在查詢中使用了該列,且執(zhí)行計劃中使用索引進行掃描;

為了避免使用不同gin索引導致查詢結果不同的問題,需要保證在物理表的一列上只有一個gin索引可用。

云數(shù)據(jù)庫GaussDB索引設計規(guī)范

1.使用數(shù)據(jù)庫索引實踐推薦的索引類型。

索引設計建議使用推薦類型,如果需要使用禁用、不推薦、限制使用的索引類型,建議聯(lián)系GaussDB數(shù)據(jù)庫專家進行評估。

表1-1 數(shù)據(jù)庫索引實踐推薦

索引類型
說明
是否推薦

主鍵/唯一索引

單列或多列主鍵/唯一索引

推薦

表達式索引

索引列為表的一列或多列計算而來的一個函數(shù)或者標量表達式

限制使用

2.對于HASH分布表,主鍵和唯一索引必須包含分布鍵。

3.合理設計組合索引,避免冗余。

例如已對(a,b,c)創(chuàng)建索引,則不應再單獨對 (a)、(b)、(c)、(a,b)、(b,c)創(chuàng)建索引。

當查詢時如果只帶有a字段上的過濾條件,一般也會利用組合索引進行查詢。

4.不建議單表創(chuàng)建多個唯一索引。

同時維護多個唯一索引的開銷遠大于維護一個多列唯一索引,如果業(yè)務邏輯上多個唯一索引,與一個多列唯一索引等價,應使用多列唯一索引。

5.組合索引字段個數(shù)不超過5個。

6.禁止組合索引組合字符串的總長度超過200。

7.索引(包括單列索引和復合索引)字段應為NOT NULL字段。

8.同字段上創(chuàng)建索引的維護效率不同。數(shù)值類型字段優(yōu)于字符類型及其他數(shù)據(jù)類型,因此對于考慮創(chuàng)建索引的ID、時間等字段,建議使用數(shù)值類型進行存儲。

9.建議在關聯(lián)列上創(chuàng)建索引。

GaussDB支持HASH JOIN,但是當內表較小等RESCAN代價較低的情況下,仍然可能選擇NESTLOOP JOIN來完成關聯(lián)。如果通過EXPLAIN可以查看到NESTLOOP JOIN計劃,則可以通過在關聯(lián)列上創(chuàng)建索引,提高NESTLOOP JOIN效率。

專題內容推薦

活動規(guī)則

活動對象:華為云電銷客戶及渠道伙伴客戶可參與消費滿送活動,其他客戶參與前請咨詢客戶經(jīng)理

活動時間: 2020年8月12日-2020年9月11日

活動期間,華為云用戶通過活動頁面購買云服務,或使用上云禮包優(yōu)惠券在華為云官網(wǎng)新購云服務,累計新購實付付費金額達到一定額度,可兌換相應的實物禮品?;顒觾?yōu)惠券可在本活動頁面中“上云禮包”等方式獲取,在華為云官網(wǎng)直接購買(未使用年中云鉅惠活動優(yōu)惠券)或參與其他活動的訂單付費金額不計入統(tǒng)計范圍內;

  • 云數(shù)據(jù)庫 RDS for MySQL常見故障排除

    查看詳情
  • 云數(shù)據(jù)庫 RDS 的實例存儲類型有哪些

    查看詳情
  • 自建數(shù)據(jù)庫遷移上云

    查看詳情
  • GaussDB數(shù)據(jù)庫免費的嗎

    查看詳情
  • 云數(shù)據(jù)庫 RDS for MySQL數(shù)據(jù)庫備份

    查看詳情
  • RDS for MySQL數(shù)據(jù)庫的特點

    查看詳情