索引
什麼是索引
可以理解為: 搜尋引導,索引是乙個特殊的資料結構,其儲存的是資料的關鍵資訊與詳細資訊的位置對應關係
例如:書本的目錄
為什麼需要索引
加速查詢,當資料量非常大的時候,查詢某乙個資料是非常慢
索引的影響:
1.不是說有了索引就能加速,得看你的查詢語句有沒有正確使用索引
2.索引也需要占用額外的資料空間
3.新增索引後 將導致,增減刪除修改變慢 (寫入)
什麼樣的資料應該新增索引:
查詢操作較多寫入較少並且資料量很大時
查詢與寫入操作的佔比,10:1 或者查詢更多
本質上索引原理是盡可能的減小搜尋範圍
磁碟io
平均 查詢乙個資料需要花費至少9ms 這段是cpu 就會切換到其他的程式 ,
我們要加速查詢,必須較少io操作的次數
索引資料結構
b+樹在b+樹中 葉子節點才是儲存真實資料的,葉子數量越多,樹的層級越高,導致io次數增加
要避免這個問題,在葉子節點中盡可能的儲存更多的資料, 應該將資料量小的字段作為索引
最左匹配原則
當b+樹的資料項是復合的資料結構,比如(name,age,***)的時候(多欄位聯合索引),b+樹會按照從左到右的順序來建立搜尋樹,比如當(張三,20,f)這樣的資料來檢索的時候,b+樹會優先比較name來確定下一步的所搜方向,如果name相同再依次比較age和***,最後得到檢索的資料;但當(20,f)這樣的沒有name的資料來的時候,b+樹就不知道下一步該查哪個節點,因為建立搜尋樹的時候name就是第乙個比較因子,必須要先根據name來搜尋才能知道下一步去**查詢。比如當(張三,f)這樣的資料來檢索時,b+樹可以用name來指定搜尋方向,但下乙個欄位age的缺失,所以只能把名字等於張三的資料都找到,然後再匹配性別是f的資料了, 這個是非常重要的性質,即索引的最左匹配特性。
聚集索引
聚集索引中包含了所有欄位的值,如果擬制定了主鍵,主鍵就是聚集索引,如果沒有則找乙個非空且唯一的字段作為聚集索引,如果也找不著,自動生成乙個字段作為聚集索引
聚集索引中儲存了所有的資料
輔助索引
除了聚集索引以外的都叫做輔助索引
輔助索引中只包含當前的索引欄位和主鍵的值
覆蓋查詢
指得是在當前索引結構中就能找到所有需要的資料 ,如果使用的是聚集索引來查詢那麼一定覆蓋查詢,速度是最快的
回表查詢
指得是在當前索引結構中找不到所需的資料,需要通過id 去聚集索引中查詢 ,速度慢與聚集索引
結論:1.使用占用空間最小的字段來作為索引
3.盡量使用覆蓋查詢
4.如果字段區分度低(重複度高),建立索引是沒有意義,反過來說應該將區分度高的字段作為索引
5.模糊匹配中,百分號盡量不要寫在前面
6.不要再等號的左邊做運算
例如:select count(*) from usr where id * 3 = 6; 也會遍歷所有記錄
7.and語句中會自動找乙個具備縮印的字段優先執行,所以我們應該在and語句中至少包含乙個具備索引的字段
8.or語句要避免使用,如果要用則保證所有欄位都有索引才能加速
9.聯合索引中,順序應該將區分度最高的放到左邊,最低的放右邊,
查詢語句中必須保證最左邊的索引出現在語句中
另外需要注意:如果要查詢的資料量非常大 索引無法加速
總結: 不是新增了索引就能提速,需要考慮索引新增的是否合理,sql語句是否使用到了索引
語法建立索引的語法:
create index 索引的名字 on 表名稱(欄位名)
聯合索引
create index 索引的名字 on 表名稱(欄位名,欄位名)
create index union_index on usr(id,email,name,gender);
刪除索引:
drop index 索引名稱 on 表名稱;
mysql引索某一行 mysql索引
mysql的索引 索引用於快速找出在某個列中有一特定值的行,不使用索引,mysql必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢資料所花費的時間就越多,如果表中查詢的列有乙個索引,mysql能夠快速到達乙個位置去搜尋資料檔案,而不必檢視所有資料,那麼將會節省很大一部分時間。myisa...
mysql 上一行減去下一行
1.新建表1新增自增行號列 考慮到自增id 有丟失資料現象 2.複製上表1為表2 3.根據表1 表2行號進行where或者left join on的處理 where 進行處理的條件為表1表2完全的匹配 left join on 處理的條件為 左表完全的匹配 設定記憶體變數 set arownum 0...
更改檔案,某一行
1 deffetch data 2print 這是查詢功能 3 tag false 4 data aaaa s n data 5 res data 6 with open bbb r encoding gbk as file 7for i in file 8if i data 9 tag true ...