mysql查询不确定的信息_mysql 07.18
1.索引
搜索引導,索引是一個特殊的數據結構,期存儲的是數據的關鍵信息與詳細詳細的位置對應關系。
目的:加速查詢。
索引的影響:
不是說擁有索引就能加速,得看你的查詢語句有沒有正確使用索引,
索引也需要占用額外的數據空間
添加索引后將導致增減刪除修改變慢(寫入)
可添加索引的數據;
查詢操作較多寫入較少并且數據量很大時
查詢與寫入操作的占比,10:1或者查詢更多
本質上索引原理是盡可能的減小搜索范圍
磁盤IO
平均查找一個數據需要花費至少9ms,這段CPU就會切換到其他的程序,想要加速查詢,必須減少IO的操作的次數。
索引數據結構
b+樹
在b+樹中 葉子節點才是存儲真實數據的,,葉子數量越多,輸的層級越高,導致IO次數增加
為避免這個問題,應在葉子節點盡可能的存儲更多數據,應該將數據量小的作為索引
最左匹配原則
當b+樹的數據項是復合的數據結構,比如(name,age,sex)的時候(多字段聯合索引),b+樹會按照從左到右的順序來建立搜索樹,比如當(張三,20,F)這樣的數據來檢索的時候,b+樹會優先比較name來確定下一步的所搜方向,如果name相同再依次比較age和sex,最后得到檢索的數據;但當(20,F)這樣的沒有name的數據來的時候,b+樹就不知道下一步該查哪個節點,因為建立搜索樹的時候name就是第一個比較因子,必須要先根據name來搜索才能知道下一步去哪里查詢。比如當(張三,F)這樣的數據來檢索時,b+樹可以用name來指定搜索方向,但下一個字段age的缺失,所以只能把名字等于張三的數據都找到,然后再匹配性別是F的數據了, 這個是非常重要的性質,即索引的最左匹配特性。
聚集索引
聚集索引中包含了所有字段的值,如果擬制定了主鍵,主鍵就是聚集索引,如果沒有這則找一個非空且唯一的字段作為聚集索引,如果也找不著,自動生成一個字段作為聚集索引
聚集索引中存儲了所有的數據
輔助索引
除了聚集索引以外的都叫輔助索引
輔助索引中只包含當前的索引字段和主鍵的值
覆蓋查詢
指的是在當前索引結構中能找到的所有需要的數據,如果使用的是聚集索引來查詢那么一定是覆蓋查詢,速度是最快的
回表查詢
指的是在當前索引結構中找不到所需的數據,如果使用的是聚集索引來查詢,速度慢于聚焦索引。
結論
1.使用占用空間最小的字段來作為索引
2.不要在一行中存儲太多的數據,若字段太多可以分表
3.盡量使用覆蓋查詢
4.如果字段區分度低(重復度高)建立索引是沒有意義的,反過來將就是應該將區分度高的字段作為索引
5.模糊匹配中,百分號盡量不要寫在前面
6.不要在等號的左邊做運算
7.and語句中會自動找一個具備索引的字段優先執行,所以我們應該在and語句中至少包含一個具備索引的字段
8.or語句要避免使用,如果要使用則保證所有字段都有索引才能加速
9.聯合索引中,順序應該將區分度最高的放到左邊,最低的放在右邊
查詢語句中應該保證最左邊的索引出現在語句中
另外需要注意的是:如果要查詢的數據量非常大,索引無法加速
總結:不是添加了索引就能提速,需要考慮索引添加的是否合理,sql語句是否使用到了索引
創建索引的語法:
create index 索引名稱 on 表名(字段名)
聯合索引:
create index 索引的名字 on 表名稱(字段名,字段名)
刪除索引:
drop index 索引名稱 on 表名稱
總結
以上是生活随笔為你收集整理的mysql查询不确定的信息_mysql 07.18的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 万王之王3d安卓转苹果(万王之王3d安卓
- 下一篇: ddos利用什么攻击(ddos攻击很挣钱