標籤:col 如何 alt 也會 自動 物理 body not 選項
唯一的是什嗎?
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)
mysql索引的應用情境以及如何使用