1. 客戶端傳送一天查詢給mysql伺服器, 形成socket連線2. 伺服器通過許可權檢查之後,會先查詢快取, 如果命中快取, 則立即返回儲存在快取中得結果, 否則進入下一階段,
3. 伺服器端進行sql解析, 預處理, 再由優化器根據sql所涉及到的資料表得統計資訊進行計算, 生成對應得執行計畫,
4. mysql根據優化器生成的執行計畫, 呼叫儲存引擎的api來執行查詢
5. 將資料返回給客戶端
所以 我們說優化sql, 其實就是讓查詢優化器根據自身的想法選擇匹配的執行計畫, 來減少查詢中產生的io
1. 冗餘資料的處理適當的資料冗餘可以提高系統的整體查詢效能,
關聯式資料庫的三正規化 :
1. 資料庫表的每一列都是不可分割的基本資料項, 同一列中不能又多個值
2. 要求資料庫表中的每乙個例項或行必須可以被唯一的區分
3. 要求乙個資料表中不包含已在其他表中已包含的非主鍵關鍵字資訊
2. 大表拆小表, 有大資料的列單獨拆成小表
3. 根據需求的展示, 設定更合理的表結構
4. 把常用屬性分離成小表
1. 索引的物理結構 :1. 資料庫檔案儲存的位置 : my.ini配置檔案中datadir對應的資料目錄中
2. 每乙個資料庫乙個資料夾 :
1. myisam引擎 : 每乙個表(user) -- >
user.myi : 存放的是資料表對應的索引資訊和索引內容
user.frm : 存放的是資料表的結構資訊
user.myd : 存放的是資料表的內容
2. innodb引擎: 每乙個表(user) -->
user.frm : 存放的是資料表的結構資訊
資料檔案和索引檔案都是統一存放在ibdata檔案中
3. 索引檔案都是額外存在的, 對索引的查詢和維護都是需要消耗io的
2. 索引的結構 :1. 預設情況下, 一旦建立了乙個表, 這個表設定了逐漸, 那麼mysql會自動的為這個逐漸建立乙個unique的 索引
3. 索引型別1. normal : 普通的索引, 允許乙個額索引值後面關聯多個行值
2. unique : 唯一索引, 允許乙個索引值後面只能有乙個行值, 之前對列新增唯一約束其實就是為這列新增乙個unique索引, 當我們為乙個表新增乙個主鍵的時候, 其實就是為這個表主鍵列設定了非空約束, 並為主鍵列調價了乙個唯一索引
3. fulltext : 全文檢索, mysql的全文檢索只能用myisam引擎, 並且效能較低, 不建議使用;
4. 索引的方法 (規定索引的儲存結構)1. b-tree : 是一顆樹(二叉樹, 平衡二叉樹,平衡樹(b-tree))
使用平衡樹實現索引, 是mysql中使用最多的索引型別, 在innodb中,存在兩種索引型別, 第一種是主鍵索引, 在索引內容中直接儲存資料的位址, 第二種是其他索引, 在索引內容中儲存的是指向主鍵索引的引用, 所以在使用innodb的時候, 要盡量的使用主鍵索引, 資料非常快
b-tree中儲存的資料都是按照一定順序儲存的資料, 是可以允許在範圍內進行查詢的
2. hash : 把索引的值做hash運算, 並存放到hash表中, 使用較少, 一般是memory引擎使用, 優點 : 因為使用hash表儲存, 按照常理, hash的效能比b-tree效率高很多
hash的缺點 :
1. hash索引只能適用於精確的值查詢, 不支援範圍查詢(age < 10)
2. 無法使用索引排序
3. 組合hash索引, 無法使用部分索引
4. 如果大量索引的ahsh值相同, 效能較低
MySQL聚集索引詳解 mysql 索引詳解
直接起飛 1.什麼是索引?索引是幫助mysql高效獲取資料的排好序的資料結構。2.索引的資料結構?為什麼選這種結構?假設我們現在這裡有一張表 以下情況都是innodb儲存引擎 idnumber 如果mysql沒有索引這種結構,那麼我們如果查詢number為51的這行記錄,那麼mysql就要從上往下掃...
MySQL聚集索引詳解 mysql索引詳解
資料結構分,有b tree索引 b tree 雜湊索引 r tree索引等。按資料塊的順序和索引節點的邏輯順序是否一致可以分為聚集索引和非聚集索引。聚集索引由於物理塊連續,在範圍掃瞄的時候可以減少磁頭尋道時間,因而比非聚集索引高效。幾種索引型別的選擇 primary 主鍵索引。unique 唯一索引...
mysql 索引定義 MySQL 索引詳解
普通索引 唯一索引和主索引 1.普通索引 普通索引 由關鍵字key或index定義的索引 的唯一任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件 where column 或排序條件 order by column 中的資料列建立索引。只要有可能,就應該選擇乙個資料最整齊 最緊湊的...