一、索引的優點:
a.索引可以加快查詢速度
b.索引是最有效的查詢優化條件
c.使用索引可以不用全表掃瞄
二、索引的缺點
a.降低了寫入的速度(insert、update): 寫入時不僅要求寫入到資料行,還要更新全部索引
索引的建立原則:
a.盡量為用來搜尋、分類或分組的資料列編制索引,不要為輸出顯示的列編制索引,為聯表查詢的關聯列設定索引
b.綜合考慮資料列的維度(非重複數值的個數------最大個數等於行數),重複值越少,索引越有效,如果重複值過多(大於30%),就沒有必要建立索引,因為此時mysql將會採用全表掃瞄
c.對短小值進行索引:短小值可以-----1.讓操作更快的完成,加快查詢速度 2.讓索引的體積更小,減少io
d.為字串的字首編寫索引(字首唯一),如果字串的字首是唯一的,那麼就沒必要為整個列建立索引
e.左邊字首原則:當建立復合索引時,比如a b c三列復合,那麼實際可用的索引是 abc ab a
f.適可而止,不要建立過多的索引
資料庫引擎和索引
myisam資料表:資料行在資料檔案裡,索引值在索引檔案裡
大量的索引可能會使索引檔案比資料檔案更快的達到最大尺寸
innodb資料表:使用表空間儲存,它管理著所有innodb型別的資料表的資料和索引的儲存,我們也可以讓innodb為每個表分別建立表空間,即便如此,所選表的資料和索引頁都是存在於同乙個表空間檔案裡
innodb使用的是聚集索引,讓主鍵盡量短小將更有好處
索引型別:
a.聚集索引(cluster index):指把資料行和主鍵值集中儲存在一起的情況,其他的索引都是二級索引——他們儲存著主鍵值和二級索引值,先在二級索引裡找到乙個主鍵值,再通過它找到相應的資料
innodb —— b-tree索引
myisam —— b-tree索引,遇到空間資料型別時使用r-tree索引
memory —— 預設雜湊索引,也支援b-tree索引,如果要使用b-tree需要在索引定義裡加using b-tree
雜湊索引:有乙個雜湊函式來依次處理每乙個資料列值。結果雜湊值將被存入該索引並用來查詢,雜湊索引在使用 「=」,「<=>」操作符進行精確匹配比較操作時速度極快,但是對範圍比較表現較弱,如:id > 30; id between 10 and 100
b-tree索引:在使用<, <=, =, >=, >, <>, != 和between 操作符進行的精確比較或者範圍比較時都很有效率,還可以適用於單方向的like查詢,如 like "abc%",注,僅僅是後方模糊
MySQL優化之索引篇 explain工具的介紹
explain簡介 explain專門用來做sql語句的調優的,在select語句前面加乙個explain可以把select的執行過程都列出來,包括哪些用了索引,哪些沒用索引,哪些查詢是全表查詢,哪些是索引查詢等 使用效果如下圖 概要描述 列名說明 id執行編號,標識select所屬的行。如果在語句...
MySQL優化 之 索引
四種索引 主鍵索引,唯一索引,普通索引,全文索引 對查詢語句會提高效率 對增刪改語句會降低效率,因為還要對索引進行增刪改!建立索引會佔磁碟空間 對頻繁查詢的字段應建立索引,對頻繁更新的字段不適合建立索引 1 新增 1.1 主鍵索引新增 1.當一張表,把某個列設為主鍵的時候,則該列就是主鍵索引 cre...
Mysql優化之索引
索引其實就是乙個檔案,它與mysql資料檔案不一樣的地方是 它是順序的儲存資料,檔案小且儲存的位置也不一樣 索引能加快檢索,但系統每一次維護資料 寫入 更新 的同時也需要維護索引,帶來額外的開銷。索引按照底層實現方式分為 b樹索引 r樹索引 雜湊索引等 索引按照具體表現分為 主鍵索引 primary...