PostgreSql INDEX 索引總結

2021-09-02 12:54:55 字數 1190 閱讀 9024

create index index_name on table_name(field_name1, field_name2,······);

注:預設建立b-tree索引

select * from pg_indexes where tablename ='table_name';

drop index index_name;

a.主鍵自動建立唯一索引;

b.頻繁作為查詢條件的字段應該建立索引;

c.查詢中與其他表有關聯的字段,例如外來鍵關係;

d.高併發的情況下一般選擇復合索引;

e.查詢中排序的字段建立索引將大大提高排序的速度(索引就是排序加快速查詢);

f.查詢中統計或者分組的字段;

g.儲存空間固定的字段更適合選作索引的關鍵字,例:與 text 型別的字段相比, char 型別的字段較為適合選作索引關鍵字

a. 頻繁更新的字段不適合建立索引,因為每次更新不單單是更新記錄,還會更新索引,儲存索引檔案;

b.表記錄太少,不需要建立索引;

c.經常增刪改的表,不需要建立索引;

d.表中包含大量重複資料,不需要建立索引,例如性別字段,只有男女,不適合建立索引; 

a. 沒有查詢條件,或者查詢條件沒有建立索引;

b. 在查詢條件上沒有使用引導列;

c. 查詢的數量是大表的大部分,應該是30%以上;

d. 使用內部函式導致索引失效,例:select * from test where round(id)=10;

e. 表記錄較少

f. 隱式轉換導致索引失效,例如:表的字段tu_mdn定義為varchar2(20), 但在查詢時把該字段作為number型別以where條件傳給資料庫:

錯誤的例子:select * from test where tu_mdn=13333333333; 

正確的例子:select * from test where tu_mdn='13333333333'; 

g. 索引列進行運算導致索引失效,運算包括(+,-,*,/,! 等),例:

select * from test where round(id)=10; 

h. like "%_" 百分號在前;

i.單獨引用復合索引裡非第一位置的索引列;

j. b-tree索引 is null不會走,is not null會走,位圖索引 is null,is not null 都會走  

寫個總的索引

會慢慢給會給這些題目排序,從易到難,按照順序做下去應該會更容易學懂pwn 同時解釋下為什麼基本每道題都要貼網上鏈結,有三個原因 1是有些題目我的確不會,是從他們那裡學來的,貼鏈結是應該的 2是有些題目我會,但是自己從頭寫指令碼太累了 然後從網上找的指令碼 3是我可能寫的不是很好,給你乙個原始的鏈結,...

mysql索引ab和ba MySQL 索引總結

1 索引是做什麼的?索引用於快速找出在某個列中有一特定值的行。不使用索引,mysql必須從第1條記錄開始然後讀完整個表直到找出相關的行。表越大,花費的時間越多。如果表中查詢的列有乙個索引,mysql能快速到達乙個位置去搜尋到資料檔案的中間,沒有必要看所有資料。大多數mysql索引 primary k...

MYSQL order by排序與索引關係總結

我們平常所說的索引,如果沒有特別指明,都是指b 樹結構組織的b tree索引。其中聚集索引,次要索引,覆蓋索引,復合索引,字首索引,唯一索引預設都是使用b 樹索引,統稱索引。當然,除了b 樹這種型別的索引之外,還有哈稀索引 hash index 等。這裡主要討論一下innodb b tree索引的使...