數據庫索引 1、索引是什么? 索引一種數據數據結構,既結構數據,大白話說:索引就是一種組織數據的方式 那么索引到底如何組織數據的呢? 為表中的一條條記錄創建建立索引就跟為書的一頁頁內容創建目錄很類似,但不太一樣 不一樣的是,創建索引分為兩步: 1、以索引字段為key與數據對應,例如 create index idx_id on t1(id); -- key為id 創建索引 key 記錄1 <- 1 記錄2 <- 2 記錄3 <- 3 記錄4 <- 4 記錄5 <- 5 。。。 2、以key為基礎構建B+樹,那么什么是B+樹??? 介紹下列樹的原理結構以及特點-》講明白下列樹是如何提速查詢的,以及每種樹的問題和演變升級過程 二叉樹 平衡二叉樹 B樹 B+樹 特點總結: 1、節點內放的key+value:二叉樹、平衡二叉樹、B樹 在葉子節點放value,其余節點只放key值:B+樹 2、放等量數據的前提下,B+樹的高度最低,查詢速度最高 2、索引分類及區別 hash索引 b+樹 3、 B+樹索引分類 聚簇索引:構建原理,只能有一個 典型特點:葉子節點放key:一整條完整記錄 輔助索引:構建原理,可以有多個 典型特點:葉子節點放的是key:該記錄對應的主鍵id 4、覆蓋索引與回表操作 命中輔助索引是否一定需要回表,如果不,解釋原因 5、聯合索引,索引的最左前綴匹配原則-》舉例說明 6、索引下推技術 7、舉例說明,命中索引之后是否一定對加速有明顯的提升------》等同於回答了如何正確使用索引!!! 范圍過大 索引字段占用空間過多 索引字段的區分度低 索引字段參與運算 索引字段放入函數 explain命令簡介 8、常識 單表300w條記錄-》硬盤空間200m uv:user view單日累計用戶訪問 2-5w pv:page view單日累計頁面被點擊的次數 20w-50w 最大並發(同時在線人數最大多少):一天內,某一時刻的並發量 1000人同時在線 數據庫(讀多寫少): 累計2w的UV,平均每人往數據庫中寫入一條數據, 那么單日新增數據條數為2w條 2w條數據庫-》占用空間大概2M 結論:以2-5w uv為例,單日數據庫空間增長量從幾M到幾十M不等 數據庫事務 舉例說明事務特性ACID 事務開啟的三種方式 事務可以設置保存點 數據庫讀現象 臟讀 不可重復 幻讀 數據庫鎖 粒度:行級< 表級 < 頁級 級別越高並發越低,考慮到性能,innodb默認支持行級鎖,但是只有在命中索引的情況下才鎖行,否則鎖住所有行,本質還是行鎖, 但是此刻相當於鎖表了 行級鎖有三種算法: Record lock Gap lock Next-key lock(默認)= Record lock+ Gap lock ------》 解決幻讀問題 級別:排他、共享 排他 共享 使用方式:悲觀、樂觀 事務隔離機制 解決: 臟讀 不可重復 幻讀 方案: RR機制+innodb存儲引擎的Next-key lock行級鎖算法 MVCC:解釋原理 快照讀 select 。。。 當前讀 其他都是
