1.客戶端通過聯結器與mysql連線
2.快取
連線建立後,執行查詢語句的時候,會先查詢快取,mysql 會先校驗這個 sql 是否執行過,以 key-value 的形式快取在記憶體中,key 是查詢預計,value 是結果集。如果快取 key 被命中,就會直接返回給客戶端,如果沒有命中,就會執行後續的操作,完成後也會把結果快取起來,方便下一次呼叫。當然在真正執行快取查詢的時候還是會校驗使用者的許可權,是否有該錶的查詢條件。
mysql 查詢不建議使用快取,因為查詢快取失效在實際業務場景中可能會非常頻繁,假如你對乙個表更新的話,這個表上的所有的查詢快取都會被清空。對於不經常更新的資料來說,使用快取還是可以的。
所以,一般在大多數情況下我們都是不推薦去使用查詢快取的。
mysql 8.0 版本後刪除了快取的功能,官方也是認為該功能在實際的應用場景比較少,所以乾脆直接刪掉了。
3.分析器
1.詞法 分析: 分析出關鍵字比如 select where from group by 等等
2.語法分析 判斷寫的語句有沒有語法錯誤。
4.優化器
它認為的最優的執行方案去執行(有時候可能也不是最優,這篇文章涉及對這部分知識的深入講解),比如多個索引的時候該如何選擇索引,多表查詢的時候如何選擇關聯順序等。
例子:select * from tb_student a where a.age='18' and a.name=' 張三 ';
確定方案:
a. 先查詢學生表中姓名為「張三」的學生,然後判斷是否年齡是 18。
b. 先找出學生中年齡 18 歲的學生,然後再查詢姓名為「張三」的學生。
根據自己的優化演算法選擇乙個較好的方案。
5.執行器。有redo-log用於資料的恢復和binlog用於資料庫主從複製。 查詢到滿足條件的所有資料並返回。
MySQL Mysql模糊查詢like提速優化
一般情況下like模糊查詢的寫法為 field已建立索引 select column from table where field like keyword 上面的語句用explain解釋來看,sql語句並未用到索引,而且是全表搜尋,如果在資料量超大的時候,可想而知最後的效率會是這樣 對比下面的寫法...
MySQL MySQL 05 高階查詢(2)
select 查詢列表 from 表.limit offset size offset 要顯示條目的起始索引,從0開始 size 顯示數量 語句放最後使用select from employees limit0,5 將多個查詢結果合併成乙個結果 select 語句1 union select 語句2...
硬碟7200mysql MySQL服務查詢優化
一 服務介面效能測試相關 tp指標 如tp50 指在乙個時間段內 如5分鐘 統計該方法每次呼叫所消耗的時間,並將這些時間從小到大的順序進行排序,取第50 的那個值作為tp50值 配置此監控指標對應的報警閾值後,需要保證在這個時間段內該方法所有呼叫的消耗時間至少有50 的值要小於此閾值,否則系統會報警...