全域性索引 字首索引 MySQL索引型別

2021-10-16 01:40:58 字數 2624 閱讀 9761

等你點關注都等的長毛了

索引型別

mysql中我們常用的索引型別有五種:

普通索引

唯一索引

主鍵索引

組合索引

全文索引

建立表:

create table `index_test` (  `id` int(11) default null,  `name` varchar(11) default null,  `idno` varchar(11) default null,  `age` int(11) default null,  `***` varchar(11) default null,  `content` varchar(500) default null) engine=innodb;
普通索引

最基本的一種索引,沒有任何限制,可以為null,可以重複,普通索引的目的就是為了加快對資料的訪問速度,為那些常被用來作查詢條件的字段建立乙個索引

sql:

alter table index_test add index idx_normal(name);
唯一索引

與普通索引類似,但是不同點在於被索引的字段的值不能重複,但是可以為null,比如身份證、員工編號等必須唯一的資訊,被設定了唯一索引的字段在整張表中都不能重複

sql:

alter table index_test add unique idx_unique(idno);
主鍵索引

與唯一索引類似,但是不同點是字段值不能為null,一般一張表只能有乙個主鍵。實際上每張表都要有乙個主鍵字段,通常情況下我們都是在建立表的時候手動新增,如果一張innodb引擎的表未明確主鍵字段,那麼innodb引擎會自動為表建立乙個隱式的自增主鍵,所以最優的情況下,我們最好手動建立乙個自增主鍵。

sql:

alter table index_test add primary key idx_pk(id);
建立索引的時候,索引名稱可以不寫。

組合索引

組合索引是建立乙個包含表中多個欄位的索引,組合索引的使用遵循"斷橋原則",也叫"最左字首原則",我們在使用組合索引的時候,會從第乙個往後匹配,使用順序影響不大,因為mysql的優化器會將索引字段恢復到響應的順序位置,如果中間橋斷了(漏掉了中間乙個或多個字段),則斷橋左側的字段才會被用到索引。

比如索引字段(a, b, c),有以下情況:

alter table index_test add index idx_cb(age, ***);
全文索引

主要用來查詢文字中的關鍵字,而不是直接與索引中的值相比較。fulltext索引跟其它索引大不相同,它更像是乙個搜尋引擎,而不是簡單的where語句的引數匹配。fulltext索引配合match against操作使用,而不是一般的where語句加like。它可以在create table,alter table ,create index使用,不過目前只有char、varchar,text 列上可以建立全文索引。值得一提的是,在資料量較大時候,先將資料放入乙個沒有全域性索引的表中,然後再用create index建立fulltext索引,要比先為一張表建立fulltext然後再將資料寫入的速度快很多,因為建表的時候表中沒有資料,而已經有了資料再建立的話,要將已存在的資料都先fulltext一下,所以慢。

sql:

alter table index_test add fulltext idx_fulltext(content);
總結

很多人在理解「最左字首原則」的時候總是會繞進去,經常有人來問啥叫最左字首原則,看到where條件中有組合索引的時候也不容易分析出哪些索引字段生效了,所以這裡我提出了「斷橋原則」來替代「最左字首原則」(全網首個),將組合索引理解成一座橋,橋斷了就走不過去了,就更生活化和形象化了。

最終我們的表建立語句變成了:

create table `index_test` (  `id` int(11) not null,  `name` varchar(11) default null,  `age` int(11) default null,  `***` varchar(11) default null,  `content` varchar(500) default null,  `idno` varchar(11) default null,  primary key (`id`),# 主鍵索引  unique key `idx_unique` (`idno`),# 唯一索引  key `normal_index` (`name`),# 普通索引  key `idx_cb` (`age`,`***`),# 組合索引  fulltext key `idx_fulltext` (`content`)# 全文索引) engine=innodb;

mysql 建字首索引 MySQL 字首索引

檢視出現頻率 select count as cnt,city from sakila.city demo group by city order by cnt desc limit 10 1.select count distinct city count from sakila.city dem...

字首索引 mysql索引總結

擊上方藍色 程式設計師白楠楠 選擇 設為星標 出處 資料結構 常見的資料結構有 雜湊表 有序陣列和搜尋樹 雜湊表是一種以鍵 值 key value 儲存資料的結構,我們只要輸入待查詢的值即 key,就可以找到其對應的值即 value。雜湊的思路很簡單,把值放在陣列裡,用乙個雜湊函式 把 key 換算...

mysql 字首索引 語法 MySQL 字首索引

索引字首 使用 字串列的索引規範中的語法,您可以建立僅使用列首字元的索引 以這種方式僅索引列值的字首可以使索引檔案小得多。為a 或 column 編制索引時 必須為索引指定字首長度。例如 col name n nblobtext create table test blob col blob,ind...