mysql 建立索引

2022-07-29 03:57:10 字數 2405 閱讀 6282

內容主要摘抄自《mysql5.7從入門到精通》

索引是對資料庫表中的一列或多列進行排序的一種資料結構,使用索引可以提高資料庫中特定資料的查詢速度。

索引是乙個單獨的、儲存在磁碟上的資料庫結構,它們包含著對資料表裡所有記錄的引用指標。

mysql 中索引儲存型別有兩種:btree 和 hash,具體和表的儲存引擎相關;myisam 和 innodb 儲存引擎只支援 btree 索引;memory/heap 儲存引擎可以支援 hash 和 btree 索引。

普通索引和唯一索引

普通索引:定義的索引列執行有空值和重複值。

唯一索引:索引列的值必須唯一,允許有空值。

單列索引和組合索引

單列索引:乙個索引只包含單列。

組合索引:在表的多個字段組合上建立的索引,使用組合索引時遵循最左字首集合,只有查詢條件中使用了這些欄位的左邊字段,索引才會被使用。

全文索引

全文索引型別為 fulltext,在定義索引的列上支援值的全文查詢,允許索引列插入重複值和空值。全文索引可以在字元或文字型別的列上建立,mysql 中只有 myisam 儲存引擎支援全文索引。

空間索引

mysql 空間資料型別有四種:geometry、point、linestring 和 polygon。空間索引是對空間資料型別的字段建立的索引,建立空間索引的列必須宣告為 not null。

索引並非越多越好

乙個表中若有大量索引,會占用磁碟空間,也會影響 insert、delete、update 等語句的效能,因為表中資料更改時,索引也會進行調整和更新。

索引中的列盡可能的少

對經常查詢的字段應該建立索引,但要避免新增不必要的字段。

對資料量小的表不要使用索引

由於資料較少,查詢的花費的時間可能比遍歷索引的時間還要短,可能不會產生優化效果。

在不同值較多的列上建立索引

例如性別欄位上只有「男」,「女」,「其他」,三個不同值,若在性別列上建立索引,可能不但不會提高查詢效率,反而會嚴重降低資料更新速度。

一般查詢結果顯示的是**形式,在查詢語句後加上 \g 可以將查詢結果縱向顯示。

上圖顯示 id 為唯一索引。

官網參考手冊(5.7)-- create index syntax

建立名為 idx_name 的普通索引,對唯一性沒有限制

create table test2 (

id int(11) not null auto_increment,

name varchar(255) not null,

num int(11) not null default 0,

created_at timestamp null default current_timestamp,

primary key (`id`),

index idx_name(name(5))

) engine=innodb default charset=utf8;

index idx_name(name(5))
上面語句指的是擷取字段 name 前5個字元作為索引,也就是說每條記錄的name欄位的值的前5個字元不能出現重複,否則在使用 insert 時會出現 「duplicate」 錯誤。

alter table test2 add index idx_name(name(5));
create index idx_name on test2(name(5));
alter table test2 drop index idx_name;
drop index idx_name on test2;
mysql命名、設計及使用規範

長度不超過767bytes,聯合索引長度不超過3072bytes。

於innodb索引長度限制的tips

索引使用經驗:什麼情況適合建索引

建立乙個表,字段如下:

批量插入80萬條資料,name長度為30字元左右

建立索引花了3秒多,建立索引後同一條查詢語句,執行時間加快的差不多770倍,對比還是很明顯的

(索引)建立MySQL索引

建立索引的必要性 主鍵預設是建立索引的,而且具有唯一性 合適地建立索引後比不建立索引,提高了查詢速度 建立索引的語法 簡單索引 可以有重複資料 create index indexname on tablename column name 1舉例子說明如 建立乙個資料表,設定一些初始的資料,然後採用...

c mysql建立索引 MySQL 建立索引

1 索引建立原則 1 搜尋的索引列,不一定是所要選擇的列。換句話說,最適合索引的列是出現在where子句中的列,或連線子句中指定的列,而不是出現在select關鍵字後的選擇列表中的列。2 使用唯一索引。考慮某列中值的分布。索引的列的基數越大,索引的效果越好。3 使用短索引。如果對字串列進行索引,應該...

mysql索引新增 mysql 建立索引

mysql 索引 內容主要摘抄自 mysql5.7從入門到精通 索引是對資料庫表中的一列或多列進行排序的一種資料結構,使用索引可以提高資料庫中特定資料的查詢速度。一 索引含義和特點 索引是乙個單獨的 儲存在磁碟上的資料庫結構,它們包含著對資料表裡所有記錄的引用指標。mysql 中索引儲存型別有兩種 ...