一、mysql一條查詢語句的執行過程:
客戶端傳送一條查詢給伺服器;
伺服器西安檢查查詢快取,如果命中了快取,則立刻返回儲存在快取中的結果,否則進入下乙個階段;
伺服器端進行sql解析,預處理(預處理器),再有優化器生成對應的執行計畫;
mysql根據優化器生成的執行計畫,呼叫儲存引擎的api來進行查詢;
將結果返回給客戶端
二、查詢速度慢原因:
一條sql語句執行的快慢最重要的衡量標準就是響應時間,如果把成查詢當作是乙個任務,那麼它由一系列子任務組成,每個子任務都會消耗一定的時間。如果優化查詢,實際上就是優化其子任務,要麼消除其中一些子任務,要麼減少子任務的執行次數。(1)優化資料訪問–查詢效能低下最根本的原因是訪問的資料太多。某些查詢可能不可避免的需要篩選大量資料,但這並不常見,大部分效能低下的查詢都可以通過減少訪問的資料量的方式進行優化。對於低效的查詢,通過下面兩個步驟來分析總是很有效: (2)是否向資料庫請求了不需要的資料–有寫查詢會請求超過實際需要的資料,然後這些多餘的資料就會被應用程式丟棄,這會給mysql伺服器帶來額外的負擔,並增加網路開銷,另外也會消耗應用伺服器的cpu和記憶體資源,例如: (3)mysql是否在掃瞄額外的記錄–在確查詢只返回需要的資料之後,接下來應該看看查詢為了返回結果是否掃瞄了過多的資料,最簡單的很亮查詢開銷的三個指標如下:
這三個指標都會記錄到mysql的慢日誌中,所以檢查日誌記錄是找到掃瞄行數過多的查詢的好辦法。
優化查詢的方式有多種,今天我們先講一下其中的一種,那就是
重構查詢的方式:有切分查詢、分解關聯查詢。
mysql>
delete
from msg where created < date_sub(
now(),
interval
3month
);
可以用以下辦法完成相同的工作:
rows_affected=
0do while rows_affected >
0
一條SQL語句的執行過程
1.1連線層 提供連線協議 tcp ip,socket 提供驗證 使用者 密碼 ip socket 提供專用連線線程 接收使用者sql,返回結果 通過以下語句可以檢視鏈結執行緒的基本情況 mysql show processlist 1.2sql層 重點 接收上層傳送的sql語句 語法驗證模組 驗證...
MySQL中一條SQL語句的執行過程
查詢語句的執行順序 客戶端通過tcp連線傳送連線請求到mysql聯結器,聯結器會對該請求進行許可權驗證及連線資源分配 max connections,8小時超時 建立連線後客戶端傳送一條語句,mysql收到該語句後,通過命令分發器判斷其是否是一條select語句,如果是,在開啟查詢快取的情況下,先在...
一條SQL更新語句的執行過程
目錄如果執行這條更新語句資料庫是如何執行的呢?update student set name 小明 where studentid 1根據之前說過的sql語句查詢的流程來說,只要表上有資料更新,有關查詢的索引就會失效,接下來分析器會根據每個單詞識別知道這是update語句,優化器根據這個id獲取需要...