mysql索引的基礎和型別
索引的基礎: 1.索引類似於書籍的目錄,要想找到一本書的某個特定主題,需要先查詢書的目錄,定位對應的頁碼
儲存引擎使用類似的方式進行資料查詢,先去索引當中找到對應的值,然後根據匹配的索引找到對應的資料行
索引對效能的影響
大大減少伺服器需要掃瞄的資料量,比如我們資料表中有一千條資料,我們只要根據條件查詢其中的一條,我們只需要根據這一列建立乙個對應的索引就可以。
幫助伺服器避免排序和臨時表
將隨機i/o變順序i/o
大大提高查詢速度,降低寫的速度,占用磁碟
索引的使用場景
對於非常小的表,大部分情況下全表掃瞄效率會更高。不用去刻意的建立索引
中到大型表,索引非常有效
特大型的表,建立和使用索引的代價將隨之增長,刻意使用分割槽技術來解決,
索引的型別
索引有很多種型別,都是事先在儲存引擎層的
普通索引:最基本的索引,沒有任何約束限制
唯一索引:與普通索引類似,但是具有唯一性,比如現在我們有了乙個a 你在建立乙個a 就會報錯了
主鍵索引:特殊的唯一索引,不允許有控制
乙個表只能有乙個主鍵索引,可以有多個唯一索引
主鍵索引一定是唯一索引,唯一索引不是主鍵索引
主鍵可以與外來鍵構成參照完整性約束,防止資料不一致
組合索引:將多個列組合在一起建立索引,可以覆蓋多個列
外來鍵索引:只有innodb型別的表才可以使用外來鍵索引,保證資料的一致性,完整性和實現級聯操作
全文索引:mysql自帶的全文索引只能用於myisam,並且只能對英文進行全文索引
mysql索引的建立原則
原則:最適合索引的列是出現在where子句中的列,或連線子句中的列而不是出現在select關鍵字後的列
索引列的基數越大,索引的效果越好
對字串進行索引,應該制定乙個字首長度,可以節省大量的索引空間
根據情況建立復合索引,復合索引可以提高查詢效率
避免建立過多的索引,索引會額外占用磁碟空間,降低寫操作的效率
主鍵盡可能選擇較短的資料型別,可以有效減少索引的自盤占用,提高查詢效率
mysql索引的注意事項
注意復合索引遵守字首原則
可以生效的
不可生效的是
因為這種屬於是最左字首型別的 所以 必須有前面的在前才能使用,否則會不可使用,使用b不能忽略a 使用c不能忽略b
like查詢,%不能在前,可以使用全文索引
百分號不能在前,要不然就算給name設定了索引,所以也無法生效。可以使用全文索引
column is null可以使用索引
如果mysql估計使用索引比全盤掃瞄更慢,會放棄使用索引
如果or前的條件中的列有索引,後面的沒有,索引都不會被用到
列型別是字串型別,查詢時一定要給值加引號,否則索引失效
比如varchar(16)
「100」
假如我在搜尋的時候 where name=100; 沒有去加引號的話 可以搜到 但是索引失效。
在一些mysql索引基礎考題中,我們可以輕鬆的通過索引基礎和型別來解決此類問題,對於一些索引建立注意事項方面的考點,我們可以通過索引建立的原則和注意事項來解決。
真題: 建立mysql復合索引應該注意哪些事項?
高效能mysql(一) 建立高效能索引
單列索引和多列索引 單列索引 多個單列索引的選擇問題 多個or條件 多個單列的效能往往效能很低,盡量建立高效的多列索引。多列索引 選擇合適的索引順序 避免範圍條件 在where子句中,in是有效的,範圍條件會導致後面的索引無效!在order by中,範圍條件和in都會導致無法按照索引排序!按照索引順...
mysql高效能索引 mysql高效能索引( )
在開發中,我們知道大多數應用的瓶頸在於sql語句的執行時耗,在這裡並不討論sql語句的安全,僅僅討論高效能sql語句,而與高效能sql語句緊密相連的就是傳說中的 索引。索引 一種工作在儲存引擎端的用於快速找到記錄的一種資料結構。mysql使用索引的方式是 先找到索引的值,再根據索引的值找到資料行。索...
建立高效能索引 《高效能Mysql》筆記2
crate table people last name varchar 50 not null,first name varchar 50 not null,dob date not null,gender enum m f not null,key last name,first name,do...