1. 索引概述
myisam和innodb儲存引擎預設的是btree索引,目前只支援字首索引,即對索引欄位的前n個字元建立索引。字首的限制應一位元組為單位進行測量,而create table 與劇中的字首長度解釋為字元數,,在為多位元組字符集的列指定字首長度時一定要加以考慮。mysql還支援全文本(fulltext)索引,該索引可用於全文索引,目前只有myisam支援,僅限於char\varchar\text列。另外myisam還支援空間列索引,且索引字段必須非空。
memory儲存引擎預設使用hash索引,也支援btree索引。
建立索引語法:
create [unique|fulltext|spatial] index index_name [using index_type] on tablename(col_name,…)
或利用alter新增主鍵索引:
1.新增主鍵索引
alter table `table_name` add primary key (`column`)
2.新增唯一索引
alter table `table_name` add unique (`column`)
3.新增全文索引
alter table `table_name` add fulltext (`column`)
4.新增普通索引
alter table `table_name` add index index_name (`column` )
5.新增組合索引
alter table `table_name` add index index_name (`column1`, `column2`, `column3`)
eg:比如為city表建立10個位元組的字首索引:create index cityname on city(city(10));
索引的刪除語法為:drop index indexname on tablename
10.2 設計索引的原則
(1) 搜尋的索引列不一定是要選擇的列,最適合索引的列是where子句中的列,或連線子句,子句中指定的列。
(2) 使用唯一索引,索引的列基數越大效果越好,存放具有不同值的列容易區分各行。
(3) 使用短索引,對字串索引應指引乙個字首,如果前10個或20個字元內多數值唯一,那就不要對整個列進行索引,這樣可以節省大量索引空間。
(4)不要過度索引,額外的索引都要占用額外的磁碟空間,修改表的內容是,索引必須更新甚至重構,只保持所需的索引有利於優化。
(5)對innodb儲存索引的表,記錄預設按照一定的順序儲存,如果有明確定義的主鍵,則按照主鍵儲存,如果無主鍵但有索引,按唯一索引的順序儲存。若無主鍵無索引表會按照自動生成的內部列進行排序。innodb表的普通索引都會儲存主鍵的鍵值,所以主鍵盡可能選擇較短的資料型別,可有效地減少索引的磁碟占用,提高索引的快取效果。
深入淺出MySQL索引(一)
首先,筆者在這裡明確一點 處理資料都是在記憶體中進行的,考慮得都是記憶體中的時間複雜度。如果我們要操作的資料集非常大,大到記憶體已經沒法處理了怎麼辦?比如資料庫表裡面上千萬條記錄。在這種情況下,對資料的處理需要不斷從硬碟等儲存裝置中調入或者調出記憶體頁面。一旦涉及到外部儲存裝置,關於時間複雜度的計算...
深入淺出MySQL索引(二)
先搜尋二級索引 非主鍵索引 找到主鍵,再到主鍵索引樹的過程,稱為回表。在下面這個表t中,如果我執行 select from t where k between 3 and 5,需要執行幾次樹的搜尋操作,會掃瞄多少行?create table t id int primary key,k int no...
MySQL學習 3 深入淺出索引(上)
innodb的索引模型 參考資料 寫在後面 環境 mysql5.7.24,for linux glibc2.12 x86 64 簡單來說,索引的出現其實就是為了提高資料查詢 的效率,就像書的目錄一樣。對於資料庫的表而言,索引其實就是它的 目錄 用於提高讀寫效率的資料結構有很多,以下介紹三種常見 也比...