1.myisam,innodb錶用的都是b-tree索引,都是"排好序的快速查詢結構".
2.memory錶用的是hash索引
3.優缺點:
(1)hash索引的查詢理論的時間複雜度是0,但是無法對範圍查詢進行優化,無法對排序進行優化,必須回行取資料,無法i用字首索引
(2)b-tree可以利用做字首進行優化
b-tree索引細分之聚簇索引與非聚簇索引
1.myisam(非聚簇索引)
(1)myisam主索引和次索引都指向資料的物理行(資料在磁碟上的位置)
(2)特點:
2.innodb(聚簇索引)
(1)innodb主鍵索引上直接存放該行資料,成為聚簇索引,次索引指向對主索引的引用
(2)如果沒有主鍵則會用unique key做主鍵,如果連unique key也沒有系統會生成乙個rowid來做主鍵
(3)innodb的主鍵盡量用整型而且是遞增型的整型
(4)特點:
1.根據where條件建立多列的聯合索引,根據左字首匹配規則
2.查詢的時候盡量寫要查的列這樣查詢的列如果正好是索引的一部分就會用到索引覆蓋
3.理想的索引要考慮(1)查詢頻繁(2)區分度高(3)長度小(4)盡量能覆蓋常用查詢字段
1.索引和排序
索引覆蓋的情況下直接再索引上查詢,就是有序的,利用索引來排序
2.重複索引和冗餘索引
重複索引:在乙個列上或者順序相同的幾個列上建立多個索引,重複索引是沒有好處的還會拖慢跟新速度要去掉
冗餘索引:兩個或多個索引所覆蓋的列有重複,冗餘索引有利於查詢
3.索引碎片與維護
修復表的資料和索引檔案
(1) alter table *** engine innodb/myisam
(2)optimize table 表名
注:修復表的資料及索引碎片,就會吧所有的資料檔案整理一遍,使之對齊這個過程中如果表的行數比較大也是很耗資源的,所以不能頻繁的修復
4.左字首不容易區分的列建立索引
1.對於做字首不容易區分的列建立索引的時候可以把內容倒過來儲存如:url
2.建立偽雜湊索引,儲存url_hash列
5.多列索引聯合索引
1.列的查詢頻率和區分度的考慮(索引長度越長,所占用空間越多,區分度越高,兩者要考慮乙個均衡)
2.滿足做字首匹配
6.延遲關聯
利用inner join 內層的查詢利用id的做索引覆蓋先查出id在關聯查詢,這樣通過id來查詢行的的過程唄延後了,叫做延遲關聯—大資料分頁原理
7.索引檢視
用explain來檢視執行計畫
重要引數說明:
table:所查詢的表名或者標的別名如果是null 表示通過計算就可以獲得不用查表如myisam表查詢select count(*) from *** 時候
key:最終用的索引
key_len:使用索引的最大長度
type:查詢方式
(1)all 從第一行開始逐行做全表掃瞄(2)index 掃面所有的索引(3)range 根據索引做範圍的掃瞄(4)ref根據索引列可以直接獲得某些資料行(5)eq_ref根據索引列可以直接引用到某一行資料(6)const,system,null值優化到了常量級別甚至不需要查詢時間,一般根據主鍵來查詢一行容易出現const,system直接根據表示式不經過表時容易出現null如myisam表查詢用max,min,count查詢所有行時並且不加where條件時
rows:查詢估計要掃瞄多少行
extra:
(1)index查詢用到了覆蓋索引,效率非常高(2)using where 光靠索引定位不了還得where判斷一下(3)using temporary 查詢用到了臨時表(4)using filesort 用到了檔案排序
資料庫 索引優化策略
關於什麼是索引,如何建立索引,索引的優缺點等,請移步我的另外一篇文章mysql索引簡談 一句話,為了加快查詢效率。注意這裡的 查詢 而不是增刪改。建立索引的列,一旦發生了增加 更新或刪除操作,索引是需要維護的,此外不宜建立大量的索引,索引也占用磁碟空間。建立索引,應該權衡 查詢 與 磁碟占用 維護索...
資料庫 索引優化策略
關於什麼是索引,如何建立索引,索引的優缺點等,請移步我的另外一篇文章mysql索引簡談 一句話,為了加快查詢效率。注意這裡的 查詢 而不是增刪改。建立索引的列,一旦發生了增加 更新或刪除操作,索引是需要維護的,此外不宜建立大量的索引,索引也占用磁碟空間。建立索引,應該權衡 查詢 與 磁碟占用 維護索...
資料庫索引優化策略
一句話,為了加快查詢效率。注意這裡的 查詢 而不是增刪改。建立索引的列,一旦發生了增加 更新或刪除操作,索引是需要維護的,此外不宜建立大量的索引,索引也占用磁碟空間。建立索引,應該權衡 查詢 與 磁碟占用 維護索引 兩者的代價,從而使整個資料庫的效能最優。首先介紹一下聯合索引。聯合索引其實很簡單,相...