1. 程式人生 > >PostgreSQL之INDEX 索引

PostgreSQL之INDEX 索引

之前總結了PostgreSQL的序列相關知識,今天總結下索引。
我們都知道,資料庫索引最主要的作用是可以提高檢索資料的速度,但是索引也不是越多越好。因為索引會增加資料庫的儲存空間,查詢資料是要花較多的時間。

1、建立索引
SQL語句如下:

CREATE INDEX idx_commodity
  ON commodity   //表名
  USING btree     //用B樹實現
  (commodity_id);  //作用的具體列

2、刪除索引
DROP index idx_commodity;

3、增加索引的優勢:
建立索引可以大大提高系統的效能。
第一,最主要的原因是可以大大加快資料的檢索速度;
第二,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性;
第三,可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義;
第四,在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間;
第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能。

4、增加索引的劣勢:
第一,建立索引和維護索引要花費時間,且隨著資料量的增加時間也會增加;
第二,索引會佔物理空間,除了資料表佔資料空間之外,每一個索引還要佔一定的物理空間;’
第三,當對錶中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。

5、索引的選擇
一般來說,應該在這些列上建立索引:
第一、 在經常需要搜尋的列上,可以加快搜索的速度;
第二、 在作為主鍵的列上,強制該列的唯一性和組織表中資料的排列結構;
第三、 在經常用在連線的列上,這些列主要是一些外來鍵,可以加快連線的速度;
第四、 在經常需要根據範圍進行搜尋的列上建立索引,因為索引已經排序,其指定的範圍是連續的;
第五、 在經常需要排序的列上建立索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;
第六、 在WHERE子句的列上面建立索引,加快條件的判斷速度。

一般來說,不應該建立索引的的這些列具有下列特點:
第一,對於那些在查詢中很少使用或者參考的列不應該建立索引。這是因為,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。
第二,對於那些只有很少資料值的列也不應該增加索引。這是因為,由於這些列的取值很少,在查詢的結果中,結果集的資料行佔了表中資料行的很大比例,即需要在表中搜索的資料行的比例很大。增加索引,並不能明顯加快檢索速度。
第三,對於那些定義為text, image和bit資料型別的列不應該增加索引。這是因為,這些列的資料量要麼相當大,要麼取值很少。
第四,當修改效能遠遠大於檢索效能時,不應該建立索引。這是因為,修改效能和檢索效能是互相矛盾的。當增加索引時,會提高檢索效能,但是會降低修改效能。當減少索引時,會提高修改效能,降低檢索效能。因此,當修改效能遠遠大於檢索效能時,不應該建立索引。

相關推薦

PostgreSQLINDEX 索引

之前總結了PostgreSQL的序列相關知識,今天總結下索引。 我們都知道,資料庫索引最主要的作用是可以提高檢索資料的速度,但是索引也不是越多越好。因為索引會增加資料庫的儲存空間,查詢資料是要花較多的時間。 1、建立索引 SQL語句如下: CREAT

PostgreSQL 11 新特性覆蓋索引(Covering Index

文章目錄 通常來說,索引可以用於提高查詢的速度。通過索引,可以快速訪問表中的指定資料,避免了表上的掃描。 有時候,索引不僅僅能夠用於定位表中的資料。某些查詢可能只需要訪問索引的資料,就能夠獲取所需要的結果,而不需要再次訪問表中的資料。這種訪問資料的方法叫做 In

PostgreSql INDEX 索引總結

1.建立索引 create index index_name on table_name(field_name1, field_name2,······); 注:預設建立B-tree索引 2.查詢索引  select * from pg_indexes where tabl

MySQL5.6Index Condition Pushdown(ICP,索引條件下推)

轉載 :https://blog.csdn.net/z69183787/article/details/53954914 http://mdba.cn/2014/01/21/index-condition-pushdownicp%E7%B4%A2%E5%BC%95%E6%9D%A1%E4%BB%

PostgreSQL 11 新特性分割槽索引

文章目錄 分割槽自動索引 分割槽表唯一約束 在 PostgreSQL 10 中,分割槽上的索引需要基於各個分割槽手動建立,而不能基於分割槽的父表建立索引。PostgreSQL 11 可以基於分割槽表建立索引。分割槽表上的索

10-SQLite建立索引(sql create index)

例如這樣一個查詢:select * from table1 where id=10000。如果沒有索引,必須遍歷整個表,直到ID等於10000的這一行被找到為止;有了索引之後(必須是在ID這一列上建立的索引),即可在索引中查詢。由於索引是經過某種演算法優化過的,因而查詢次數要少的多。

[轉]greenplum(postgresql)數據字典

pda 系統 cad lang 地址 一個數 opera attribute string greenplum是基於postgresql開發的分布式數據庫,裏面大部分的數據字典是一樣的。我們在維護gp的時候對gp的數據字典比較熟悉,特此分享給大家。在這裏不會詳細介紹每個字典

數據查詢優化mysql索引

between 如果 哪些 isa 綜合 ring 信息 xpl xxx 為什麽要建立索引: 索引用於快速找出在某個列中有一特定值的行。不使用索引,MySQL必須從第1條記錄開始然後讀完整個表直到找出相關的行,還需要考慮每次讀入數據頁的IO開銷。而如果采取索引,則可以根據索

利用js輸出ul下li的index索引

{} 事件委托 eve rip 實現 lis dataset nodelist arr <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti

MongoDB 學習筆記 TTL索引,部分索引和文本索引

強制 類型 支持 行存儲 pan 事件 搜索 篩選 ext TTL索引: TTL集合支持mongodb對存儲的數據進行失效時間設置,經過指定的時間段後、或在指定的時間點過期,集合自動被mongod清除。這一特性有利於對一些只需要保存一定時間的數據信息進行存儲,比如機器產生

Mysql性能優化覆蓋索引

查找 cnblogs 都是 記錄 性能優化 nod 如果 libary 使用 因為我們大多數情況下使用的都是Innodb,所以這篇博客主要依據Innodb來講 b+樹(圖片來自網絡)

postgresqlDropuser

postgresql dropuser Dropuser 刪除一個PostgreSQL用戶帳戶,需要說明的是只有超級用戶或帶有CREATEROLE權限的用戶可以執行該命令,如果要刪除超級用戶,只能通過超級用戶的身份執行該命令。該命令的使用方式如下: dropuser [option.

day40 python MySQL【四】 索引】【視圖】【觸發器】【存儲過程】【函數】

cin 數量 存儲 自動 條件語句 ima doc 有序 lan 1.索引   索引相當於圖書的目錄,可以幫助用戶快速的找到需要的內容.   數據庫利用各種各樣的快速定位技術,能夠大大提高查詢效率。特別是當數據量非常大,查詢涉及多個表時,使用索引往往能使查詢速度加快成千上

算法7 五大查找索引查找

.html spa 代碼 技術分享 存在 val amp title key 上一篇總結了二分查找,這一篇要總結的是索引查找。 關於索引,我們很容易地聯想到數據庫中的索引,建立了索引,可以大大提高數據庫的查詢速度。 索引查找又稱為分塊查找,是一種介於順序查找和二分查找之

關於index 索引

gpo body tde 數據 刪除 day rop 數據查詢 student index : 索引:建立索引的目的是提高數據查詢的速度。 1:建立索引 index eg:對birthday 字段經常進行查詢操作,可以考慮在該字段上建立 index 。 create ind

sql強制索引

數據查詢 建立 處理 存在 數據庫 force 第一時間 select for 1、今天我遇到一個問題,在處理百萬級數據查詢的時候,一般查詢會很慢。 2、第一時間想到是建立聯合索引,但是數據庫存在多條索引的情況下,索引的執行是全部執行。 3、所以這裏要按照特定的索引執行,就

PostgresqlVACUUM和VACUUM FULL對比

其它 一次 能夠 cat 定期 規劃 相對 得到 如果 VACUUM命令存在兩種形式,VACUUM和VACUUM FULL,它們之間的區別見如下表格: 無VACUUM VACUUM VACUUM FULL 刪除大量數據之後 只是將刪除數據

解決phpstrom 啟動卡的問題 和index索引加載慢的問題

rec 啟動 toolbar ble lsp ber 思路 opengl exc 第一,解決啟動卡的問題 只要修改兩個Java虛擬機參數,就徹底解決了卡的問題了。 操作步驟如下: 找到C:\Program Files\JetBrains\PhpStorm 2018.2.2\

PostgreSQL查看索引的使用情況

init postgres 通過 where 刪除 seek odi exe isnull --========================================== --查看索引的使用情況 --索引在重建或刪除新建時sys.dm_db_index_usag

Sql Sever效能優化指定索引

背景:生產環境SQL語句查詢過慢(資料總量在350萬左右),日誌中心一直報警 解決過程:分析無果後,求助於公司的DBA,DBA分析後建議在語句中指定索引 解決:在SQL語句中指定索引,效果相當明顯,親測有效 優化前SQL: SELECT ROW_NUMBER() OVER ( ORDER BY