mysql引索某一行 MySQL之索引

2021-10-18 21:28:28 字數 1920 閱讀 4845

索引

什麼是索引

可以理解為: 搜尋引導,索引是乙個特殊的資料結構,其儲存的是資料的關鍵資訊與詳細資訊的位置對應關係

例如:書本的目錄

為什麼需要索引

加速查詢,當資料量非常大的時候,查詢某乙個資料是非常慢

索引的影響:

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 ...