数据库07
索引
索引是一種單獨的物理層面的數據結構,其作用是用于加速查詢
mysql把數據存儲到硬盤中,硬盤讀寫速度非常慢
一個應用程序,本質上就是對數據進行增刪改查
一旦數據量比較大時,硬盤的響應速度變慢,給用戶的感覺應用程序非常的慢
查詢操作是應用程序使用中頻率最高的操作
索引最終目的就是要提升查詢速度
索引帶來的問題:
1 添加索引后,整體的數據更多了(占用額外的磁盤空間)
2 由于有了索引,多數數據的添加修改刪除,都會引發索引的重建(使增刪改的效率降低)
索引不是越多越好
索引的實現:
查詢之所以慢的原因,數據量大是一個問題
但最核心的問題就是硬盤IO操作速度問題
mysql通過B+樹結構來組織數據
IO操作有一個預讀的優化機制:操作系統會將相鄰的數據也讀取到內存中,來減少讀取次數
mysql 通過B+樹這種結構來減少IO操作
B+樹種每一個磁盤塊有兩個數據項,三個地址,在查詢時會比較大小
如果小于左邊就訪問左邊的磁盤塊,如果大于右邊就訪問右邊的磁盤塊否則就訪問中間的磁盤塊,與二分法相同,只不過每次把數據分成三段
聚集索引(主鍵)
主鍵索引,速度快因為只要根據id找到葉子節點
那么該行的所有數據都拿到了
innoDB需要用主鍵索引來建立數據結構,索引每一個表都應該有主鍵
輔助索引
除了主鍵索引之外的所有索引都是負責索引
輔助索引會單獨創建樹結構,其中存儲索引數據本身以及該數據對應主鍵值
查找過程中肯定出現的情況
覆蓋索引:是在當前樹結構中就拿到了所有需要的數據
回表:是在負責索引中沒有查詢到需要的數據,就需要拿著id回到主鍵索引中查找
在編寫sql時,如果有主鍵值,優先使用主鍵來查詢
如果沒有主鍵值,需要用輔助索引,盡量少查字段
最好保證需要的數據就在輔助索引中,避免使用select *
索引的優化,分為兩方面
1 索引結構的優化
數據量小的,重復度低的做索引
2 sql語句的優化
sql語句中條件應該是索引字段
避免在模糊匹配中,在第一個字符使用%
不要對主鍵進行運算
3 and 與 or
在and語句紅mysql會優化查詢帶有索引的字段,無論書寫位置,都會先找主鍵
or語句不會自動選擇索引,需要避免使用or語句
4 多字段聯合索引
如果要查詢的字段教多,為每一個字段都創建索引會造成額外的容量的占用并且當你修改一條記錄時又可能索引都需要重建,會非常慢
建立多字段聯合索引中順序是重點
創建索引是,把重復度低的字段放在最左邊,依次排開
編寫sql語句時,保證重復度低的字段出現在sql語句中即可
創建索引語法
create index 索引的名字 on 表名(字段名);
刪除索引
drop index 索引名字 on 表名;
轉載于:https://www.cnblogs.com/LinChengcheng/p/10573832.html
總結
- 上一篇: 当前读与快照读
- 下一篇: SQL 查询--日期条件(今日、昨日、本