這是一篇適合初學者看的索引入門部落格,耐心看完,會學會的,參考總結出來的!!!!!!!!!!!
- 索引是表的目錄,類似於字典中的目錄,用於快速定位查詢資料,索引會儲存在額外的檔案中。
- 索引可以提高查詢速度,會減慢寫入速度,索引的缺點市建立和維護索引需要耗費時間。
- 索引也不是越多越好,索引雖然可以提高查詢效率,但同時頁降低了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,有些儲存引擎支援更多的索引數和更大的...