c mysql建立索引 MySQL 建立索引

2021-10-22 13:33:01 字數 2364 閱讀 7289

1、索引建立原則

(1)搜尋的索引列,不一定是所要選擇的列。換句話說,最適合索引的列是出現在where子句中的列,或連線子句中指定的列,而不是出現在select關鍵字後的選擇列表中的列。

(2)使用唯一索引。考慮某列中值的分布。索引的列的基數越大,索引的效果越好。

(3)使用短索引。如果對字串列進行索引,應該指定乙個字首長度,只要有可能就應該這樣做。

(4)利用最左字首。在建立乙個n列的索引時,實際是建立了mysql可利用的n個索引。多列索引可起幾個索引的作用,因為可利用索引中最左邊的列集來匹配行。這樣的列集稱為最左字首。

(5)不要過度索引。不要以為索引「越多越好」,什麼東西都用索引是錯誤的。

(6)對於innodb儲存引擎的表,記錄缺省會按照一定的順序儲存,如果有明確定義的主鍵,則按照主鍵順序儲存。如果沒有主鍵,但是有唯一索引,那麼就是按照唯一索引的順序儲存。如果既沒有主鍵又沒有唯一索引,那麼表中會自動生成乙個內部列,按照這個列的順序儲存。按照主鍵或者內部列進行的訪問是最快的,所以innodb表盡量自己指定主鍵,當表中同時有幾個列都是唯一的,都可以作為主鍵的時候,要選擇最常作為訪問條件的列作為主鍵,提高查詢的效率。另外,還需要注意,innodb表的普通索引都會儲存主鍵的鍵值,所以主鍵要盡可能選擇較短的資料型別,可以有效地減少索引的磁碟占用,提高索引的快取效果。

2、常見索引描述

(1)普通索引:alter table table_name add index index_name(column_name)

最基本的索引,沒有任何限制。

(2)唯一索引:alter table table_name add unique index index_name(column_name)

與「普通索引」類似,不同的就是:索引列的值必須唯一,但允許有空值。

(3)主鍵索引:alter table table_name add primary key(column_name)

一種特殊的唯一索引,不允許有空值,且每張表只能有乙個。

(4)全文索引:alter table table_name add fulltext index index_name(column_name)

char,varchar,text型別的列才能建立全文索引,主要用於查詢文字中的關鍵字,並不是直接與索引中的值進行比較。配合match、against關鍵字才能使用。

(5)字首索引:alter table table_name add index index_name(column_name(number))

有時候需要索引很長的字元列,這會讓索引變得大且慢。通常可以索引開始的部分字元,這樣可以大大節約索引空間,從而提高索引效率。

(6)組合索引:alter table table_name add index index_name(column_name1, column_name2, column_name3)

為了更多的提高mysql效率可建立組合索引,遵循「最左字首」原則。建立組合索引應該將最常用做限制條件的列放在最左邊,依次遞減。組合索引最左字段用in是可以用到索引的。相當於建立了a,a,b,a,c,a,b,c四個索引。

最左字首匹配規則:mysql會一直向右匹配直到遇到範圍查詢(>,3 and d=4,如果建立(a,b,c,d)順序索引,d是用不到索引的,如果建立(a,b,d,c)順序索引則都可以用到。

in和=可以亂序,比如 a = 1 and b =2 and c=3建立(a,b,c)索引可以任意順序,mysql查詢優化器可以幫你生成執行計畫,使得索引可以被識別的形式。

3、索引使用注意事項

(1)如果mysql估計使用索引比全表掃瞄更慢,則不使用索引。

(2)用or分割開的條件,如果or前的條件中的列有索引,而後面的列中沒有索引,那麼涉及到的索引都不會被用到。

(3)組合索引中,第乙個索引列沒有被匹配,那麼在查詢中這個索引也不會被mysql採用。

(4)如果like是以%開始,也不會用到索引。

(5)如果列型別是字串,那麼一定記得在where條件中把字元常量值用引號引起來,否則的話即便這個列上有索引,mysql也不會用到的。

4、兩種索引結構

(一)hash索引

mysql中,只有memory(memory表只存在記憶體中,斷電會消失,適用於臨時表)儲存引擎顯示支援hash索引,是memory表的預設索引,儘管memory表也可以使用b+tree索引。hash索引把資料以hash形式組織起來,因此當查詢某一條記錄的時候,速度非常快。但是因為hash結構,每個鍵只對應乙個值,而且是雜湊的方式分布。所以它並不支援範圍查詢和排序等功能。

(二)b+tree索引

b+tree是mysql使用最頻繁的乙個索引資料結構,是innodb和myisam儲存引擎預設的索引。相對hash索引,b+tree在查詢單條記錄的速度比不上hash索引,但是因為更適合排序等操作,所以它更受歡迎。畢竟不可能只對資料庫進行單條記錄的操作。

c mysql 建立資料庫 MySQL 建立資料庫

建立 mysql 資料庫 使用 mysqladmin 建立資料庫 建立或刪除資料庫需要擁有特殊的許可權。假設你獲得了root使用者許可權,那麼利用 mysqladmin 二進位制命令可以建立任何資料庫。範例下面就來建立乙個名叫 tutorials 的資料庫 root host mysqladmin ...

(索引)建立MySQL索引

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

mysql索引新增 mysql 建立索引

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