mysql索引入門總結

2021-10-18 23:33:40 字數 3718 閱讀 2658

這是一篇適合初學者看的索引入門部落格,耐心看完,會學會的,參考總結出來的!!!!!!!!!!!

-  索引是表的目錄,類似於字典中的目錄,用於快速定位查詢資料,索引會儲存在額外的檔案中。

-  索引可以提高查詢速度,會減慢寫入速度,索引的缺點市建立和維護索引需要耗費時間。

-  索引也不是越多越好,索引雖然可以提高查詢效率,但同時頁降低了insert和update效率,因為在insert或update時有可能會重建索引。

-  所以怎樣建索引需要慎重考慮,視情況而定。乙個表的索引數最好不要超過5個,若太多則應考慮一些不常用的列上建索引是否有必要。

2.1.1 表的主鍵,外來鍵必須有索引;外來鍵是唯一的,而且經常會用來查詢

2.1.2 經常與其他表進行連線的表,在連線欄位上應該建立索引;

2.1.3 資料量超過300的表應該有索引;

2.1.4 重要的sql或呼叫頻率高的sql,比如經常出現在where字句中的字段,order by ,group by , distinct的字段都要新增索引

2.1.5 經常用到排序的列上,因為索引已經排序。

2.1.6 經常用到範圍內搜尋的列上建立索引,因為索引已經排序了,其指定的範圍時連續的

3.1.1 對於一些查詢很少使用的或者參考的列不應該建立索引

如果列很少使用時,有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。

3.1.2 對於哪些只有很少資料值的列也不應該增加索引

因為本來結果集合就是相當於全表查詢了,所以沒有必要。這是因為,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的資料行佔了表中資料行的很大比 例,即需要在表中搜尋的資料行的比例很大。增加索引,並不能明顯                  加快檢索速度。

3.1.3 text,image,bit資料型別不應設為索引

這是因為,這些列的資料量要麼相當大,要麼取值很少。

3.1.4 當修改效能遠遠大於檢索效能時,不應該建立索引。

這是因為,修改效能和檢索效能是互相矛盾的。當增加索引時,會提高檢索效能,但是會降低修改效能。當減少索引時,會提高修改效能,降低檢索效能。因 此,當修改效能遠遠大於檢索效能時,不應該建立索引。

3.1.5 不會出現在where條件中的字段不該建索引

4.1.1 越小的資料型別通常更好:越小的資料型別通常在磁碟,記憶體和cpu快取中都需要更少的空間,處理起來更快。簡單的資料型別更好:整型資料比字元處理開銷更小,因為字串的標膠更複雜

4.1.2 盡量避免null:應該指定為not null ,含有空值的列很難進行查詢優化,因為他們是的索引,索引的統計資訊以及比較運算更加複雜,也可能導致復合索引無效

4.1.3 主鍵選擇策略

- 每個表必須顯示指定主鍵;

- 主鍵盡量為乙個字段,且為資料型別,避免使用字串;

- 主鍵盡量保持增長趨勢,建議使用id的生成器

- 主鍵杜絕使用聯合索引

4.1.4 每個表的索引盡量少於5個,避免建立重複冗餘索引,每個組合索引避免超過三個字段,索引不是越多越好,謹慎新增索引,綜合考慮資料分析和資料更新

4.1.5 重要的sql或呼叫頻率的sql

- update/select/delete的where條件列字段都要新增索引

- order by /group by distinct 的字段都要新增索引

4.1.6 避免出現 index merge (單索引 or 的查詢);合理利用covering index

4.1.7 組合索引建立時,把區分度(選擇性高)的字段放在前面;根據sql的特性,呼叫組合索引的順序

4.1.8 對於varchar欄位加索引,建議使用字首索引,從而減小索引大小

- 僅加速查詢 最基本的索引,沒有任何限制,是我們大多數情況下使用到的索引。

- 例:

create index  employee_no_index on  ums_account(employee_no); 

- show index from `ums_account`

- 與普通索引類似,不同的是:加速查詢+列值唯一(可以有null)

- 例:

create unique index  username  on ums_account(username)
- 全文索引(full-text)僅可以適用於myisam引擎的資料表;作用於char,varchar,text資料型別的列。

- 將幾列作為一條索引進行檢索,使用最左匹配原則

create table amy_index_test (

id   bigint(20)  not null auto_increment primary key comment  '主鍵',

name  varchar(32) not null comment '姓名',

email varchar(64) not null comment  '郵箱',

message text default  null comment '個人資訊',

index index_name (name) comment '索引name'

) comment  = '索引測試表';

show index from `amy_index_test`

1- create index name on `amy_index_test`(name)

2- create index message on `amy_index_test`(message(200));

3- alter table `amy_index_test` add index emp_name (name);

- alter table amy_index_test  drop index  emp_name ;

- drop index name on `amy_index_test`;

- show index from `ums_account`
-大神部落格:

- 如果以錯誤的方式使用,則即使建立索引也會不奏效。

- 對於使用 like 的查詢,只有%號不在第乙個字元,索引才可能會被使用

-  如果列是索引,使用 column_name is null 將使用索引

【強制】 主鍵索引名為pk_表名_欄位名;唯一索引名為uk_表名_欄位名;普通索引名則為idx_表名_欄位名。

##### 年紀大了,前一天學的內容,第二天就能忘!!!!!!!!!!!!!

MySQL索引入門

索引就相當於表的目錄一樣,可以提高我們查詢資料的效率,是一種資料結構。常見的mysql主要有兩種結構 hash索引和b 樹索引。使用哪種資料結構跟儲存引擎有關,innodb引擎預設使用的是b 樹。補充 b 樹索引和雜湊索引的區別?什麼場景不適合使用索引 2 對於那些只有很少資料值的列不適合建立索引 ...

MySQL索引入門

索引於mysql資料庫,就像是目錄於書籍,讀者可以通過目錄可以快速定位到自己想要的內容。同時,索引基本是對mysql進行查詢效能優化最有效的手段。因為mysql的索引是在引擎層而不是伺服器層實現的,所以不同儲存引擎的索引的種類和工作方式是不同的,即便看起來相同,底層實現邏輯也可能大相徑庭。b tre...

mysql索引入門簡介

舉個例子 若將資料庫比作一本書,那麼索引就是書的目錄,用來提高查詢的速度。通過索引,查詢資料時可以不必讀完記錄的所有資訊,而只是查詢索引列。表的不同的儲存引擎定義了每個表的最大索引數和最大索引長度。所有儲存引擎對每個表至少支援16個索引,總索引長度至少為256b,有些儲存引擎支援更多的索引數和更大的...