mysql索引的應用場景以及如何使用


唯一的是什么?

  1. 索引列(字段)的所有值都只能出現一次,即必須唯一

--------------------------------------------------------------------------------

主鍵索引與唯一索引的區別

  1. 主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。

  2. 主鍵創建后一定包含一個唯一性索引,唯一性索引並不一定就是主鍵。

  3. 唯一性索引列允許空值,而主鍵列不允許為空值。

  4. 主鍵列在創建時,已經默認為空值 ++    唯一索引了。

  5. 一個表最多只能創建一個主鍵,但可以創建多個唯一索引。

  6. 主鍵更適合那些不容易更改的唯一標識,如自動遞增列、身份證號等。

  7. 主鍵可以被其他表引用為外鍵,而唯一索引不能。   ?

--------------------------------------------------------------------------------

復合索引

  1. 用戶可以在多個列上建立索引,這種索引叫做復合索引(組合索引)。

  2. 就是幾個字段聯合在一起組成一個索引.復合索引的創建方法與創建單一索引的方法完全一樣。

  3. 但復合索引在數據庫操作期間所需的開銷更小,可以代替多個單一索引。

  4. 當表的行數遠遠大於索引鍵的數目時,使用這種方式可以明顯加快表的查詢速度。

--------------------------------------------------------------------------------

(abc) (ab) (ac)(bc)(a) (b) (c)

  1. 復合索引又叫聯合索引。

  2. abc    ab    a     ac  可以

  3. 對於復合索引:Mysql從左到右的使用索引中的字段,一個查詢可以只使用索引中的一部份,但只能是最左側部分。

  4. 例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3種組合進行查找,但不支持 b,c進行查找 ,當最左側字段是常量引用時,索引就十分有效。

--------------------------------------------------------------------------------

除復合索引外,什么情況下索引被使用,什么情況下不會被使用

  1. 建立索引的目的就是幫助查詢,如果查尋用不到則索引就沒有必要建立。

  2. 如果表是經常需要更新的也不適合做索引 。頻繁更新會導致索引也會頻繁更新,降低寫的效率。

  3. 唯一性差的字段不適合創建索引。

  4. 當給一個字段創建了索引的話,而這個字段要進行like模糊查詢的話,那么這個值左邊不可以有%,因為索引查詢是要從左到右的,你如果給它加上%后,左邊的值不是確定的話,它會找不到這個索引。所以在使用like模糊查詢的時候,值得左邊不可以有%。

  5. order by  不會使用索引

  6. or 當前后2個字段都有索引時才可以索引出來 否則不可以。

  7. 如果數據表過大(5w以上)則有些字段(字符型長度超過(40))不適合作為索引。查詢大量數據時,索引有效,但是慢

  8. 不使用索引的原因:因為索引時會先過一遍索引在過一遍數據

--------------------------------------------------------------------------------

全文檢索:

  1. 全文檢索就是FULLTEXT,用於 MyISAM 表,在列類型為 CHAR、VARCHAR 或 TEXT 列上創建。

  2. 將數據裝載到一個沒有 FULLTEXT 索引的表中,然后再使用 ALTER TABLE (或 CREATE INDEX) 創建索引,這將是非常快的。

  3. 將數據裝載到一個已經有 FULLTEXT 索引的表中,將是非常慢的。

  4. MySQL自帶的全文索引只能對英文進行全文檢索。要檢索中文用sphinx。

  5. 創建全文檢索:alter table 表名 add fulltext index 索引名(列名,[列名],[列名]..(可以有多個,可以有一個)

  6. 在創建表的時候建全文檢索:CREATE TABLE article (

  7.      id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,

  8.      FULLTEXT (title, content) --在title和content列上創建全文索引

);

--------------------------------------------------------------------------------

場景

  1. 當數據多且字段值有相同的值得時候用普通索引。

  2. 當字段多且字段值沒有重復的時候用唯一索引。

  3. 當有多個字段名都經常被查詢的話用復合索引。

  4. 普通索引不支持空值,唯一索引支持空值。

  5. 但是,若是這張表增刪改多而查詢較少的話,就不要創建索引了,因為如果你給一列創建了索引,那么對該列進行增刪改的時候,都會先訪問這一列的索引,

  6. 若是增,則在這一列的索引內以新填入的這個字段名的值為名創建索引的子集,

  7. 若是改,則會把原來的刪掉,再添入一個以這個字段名的新值為名創建索引的子集,

  8. 若是刪,則會把索引中以這個字段為名的索引的子集刪掉。

  9. 所以,會對增刪改的執行減緩速度,

  10. 所以,若是這張表增刪改多而查詢較少的話,就不要創建索引了。

  11. 更新太頻繁地字段不適合創建索引。

  12. 不會出現在where條件中的字段不該建立索引。

--------------------------------------------------------------------------------

索引創建

CREATE [UNIQUE|CLUSTERED] INDEX INDEX_NAME ON TABLE_NAME(PROPERTY_NAME);

其中UNIQUE和CLUSTERED為可選項,分別是建立唯一索引和聚簇索引,具體解釋為:

UNIQUE:表示此索引的每一個索引值只對應唯一的數據。

CLUSTERED:表示要建立的索引時聚簇索引,即索引項的順序與表中記錄的物理順序一致的索引組織

ALTER TABLE table_name ADD INDEX index_name (column_list)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM