如圖,分為server與儲存引擎兩層。
從圖中不難看出,不同的儲存引擎共用乙個 server 層,也就是從聯結器到執行器的部分。
如果不指定儲存引擎預設使用innodb。
負責與客戶端建立連線,進行使用者名稱密碼認證,認證後獲得許可權。對許可權的修改只會在重新登陸後生效。
連線長時間不使用會自動斷開。
長連線可以減少連線建立銷毀的開銷,但是mysql執行過程中臨時使用的記憶體會越來越多,導致佔滿記憶體,可能會被系統殺掉(oom)。
解決方法:
1、定期斷開長連線
2、mysql_reset_connection
執行相同的sql會使用快取,但是對錶的修改會使快取失效(不好用)。mysql 8.0移除
詞法分析->語法分析
1、多個索引決定用哪個索引
2、多表關聯(join)決定表的連線順序
查詢之前先判斷許可權
mysql> select * from t where id=10;
執行過程(id不是索引):
1、呼叫 innodb 引擎介面取這個表的第一行,判斷 id 值是不是 10,如果不是則跳過,如果是則將這行存在結果集中;
2、呼叫引擎介面取「下一行」,重複相同的判斷邏輯,直到取到這個表的最後一行。
3、執行器將上述遍歷過程中所有滿足條件的行組成的記錄集作為結果集返回給客戶端。
如果有索引,呼叫」獲取滿足條件的第一行「介面和"滿足條件的下一行介面"。
課後思考:sql中使用了不存在的列,在哪一步報錯?
答案:分析器
判斷臨時表是否存在
if object id tempdb.t is not null drop table t if objectproperty object id tempdb.t istable 1 print authors is a table else if objectproperty object i...
判斷臨時表是否存在 臨時表的刪除
以下是在網上搜尋的乙個說明 臨時表有兩種型別 本地和全域性。它們在名稱 可見性以及可用性上有區別。本地臨時表的名稱以單個數字符號 打頭 它們僅對當前的使用者連線是可見的 當使用者從 sql server 例項斷開連線時被刪除。全域性臨時表的名稱以兩個數字符號 打頭,建立後對任何使用者都是可見的,當所...
T SQL判斷是否存在表 臨時表
利用sql server的系統函式 object id 可以判斷是否存在表 臨時表,object id 的作用是返回架構範圍內物件的資料庫物件標識。即返回系統檢視 sys.objects 的 object id 字段值 object id database name schema name sche...