Mysql常用關鍵字指令和參數總結

2020-12-27 野狐

最近在學習極客時間上的mysql課程,對mysql資料庫有了更多了解,本篇文章是想總結一些mysql的基礎知識。目的是加深自己的記憶,也可以提升對mysql設計原理的了解。

關鍵字

名詞

transaction:事物

view:視圖

consistent read view:一致性視圖

redo log:重做日誌,物理日誌,記錄數據頁上做的什麼修改

binlog:歸檔日誌,邏輯日誌,記錄語句的原始邏輯,即sql語句

WAL:write ahead logging,更新數據時先寫redo log後寫磁碟

crash-safe:程序異常時不丟數據

B+樹:innodb的索引存儲方式,索引不僅存在內存,而且還存在磁碟

clustered index:聚簇索引,就是主鍵索引

secondary index:非主鍵索引,基於非主鍵索引查詢需要多查一次主鍵索引樹,即回表。

覆蓋索引:比如以一個索引為where條件查ID,這個索引樹上就有id,不需要查主鍵索引樹回表。

索引最左前綴:聯合索引最左面開始的n個字節優先索引

索引下推:聯合索引ab上可以優先判斷b是否滿足然後再去回表,提高效率,降低回表次數

前綴索引:不能用到覆蓋索引,即需要回表

頁分裂:插入數據時,索引上的數據頁滿了,需要新申請數據頁

Auto_Increment:自增主鍵,有序插入避免了頁分裂,提高效率降低空間使用率。

ACID:atomicity原子性,consistency一致性,isolation隔離性,durability持久性

dirty read:髒讀

non-repeatable read:不可重複讀

phantom read:幻讀

幻讀:同一個事物,前後兩次讀同一個範圍得到的結果不同,因為後一次有新插入導致。

read uncommited: 讀未提交

read commited:讀提交

repeatedable read:可重複讀

seraileable:串行化

當前讀:讀到所有數據的已經提交的最新值。

讀提交隔離級別的優勢:語句執行過程中加的行鎖,在語句執行完成後就把不滿足條件的鎖釋放了,不用等到事務提交,比可重複度和串行化更快。

過期讀:因為主從延遲導致讀的數據是舊的

短連結風暴短連結太多導致mysql不可用

Dead Lock:死鎖

next-key lock:間隙所和行鎖一起Gap Lock:間隙鎖

全局鎖:Flush tables with read lock命令實現,整個資料庫只能讀

兩階段鎖:在提交事物後才釋放行鎖。因為鎖在最後釋放,所以如果鎖多行或者多個表的行,要把鎖衝突最大的放在最後。

排序算法:小數據量內存中快排,大數據外部排序歸併,還有order by limit小數據用堆排序(優先隊列)

io_thread:主備同步時備庫用來連接主庫的線程

sql_thread:執行日誌中的命令線程

雙M: 主備切換的結果

commit_id:一組事務裡一起提交的事務有相同的commit_id

frm:mysql表結構文件

ibd:mysql表數據文件

髒頁:內存數據和磁碟不一致的數據頁

刷髒頁:就是把內存中的數據刷到磁碟上

MVCC:資料庫的多版本並發控制

mysqldump:mysql官方自帶的邏輯備份工具

DML:增刪改數據

DLL:修改表結構

MDL:meta data lock元數據鎖,加MDL寫鎖時才能做修改欄位

DDL NOWAIT/WAIT n:在執行alter修改表結構時支持等待時間,對熱點表修改欄位有幫助。

快照:資料庫的當時狀況

低水位:每個事物啟動後和提交前活躍的事物列表裡最小的事物id

高水位:每個事物啟動後和提交前活躍的事物列表裡最大的事物id

net_buffer:網絡緩存區

socket send buffer:發送緩存區

socket receive buffer:客戶端接收緩存

mysql_store_result:客戶端把查詢結果緩存在本地

buffer pool: 輸入輸出緩存,能提高讀寫效率,命中率即內存命中率,越高越好

NLJ:Index Nested-Loop Join算法,效果最好

SNL:Simple Nested-Loop Join算法

BNL:Block Nested-Loop Join 算法,掃描過度儘量不用

join_buffer: join 的內存緩存

MRR:multi-range read,儘量順序讀盤

read_rnd_buffer:通過二級索引讀到id放到此緩存區

Index Organizied Table:索引組織表,innodb是把數據都放到B+樹即主鍵索引上

Heap Organizied Table:堆組織表,memory引擎數據單獨存儲,索引上保存數據的地址

參數

transaction-isolation:事物的隔離級別配置

innodb_lock_wait_timeout:死鎖等待超時時間,默認值50s,太長了。。。

innodb_deadlock_detect:死鎖檢測

transaction id:事物id

row trx_id:數據版本的事物id

undo log:回滾日誌

readonly: 只讀模式,從庫或者備庫

wait_timeout:mysql連接空閒超過一段時間後,mysql會斷開這個連接

max_connections:mysql的最大可接受連接數

sys.innodb_lock_waits: 顯示系統中的鎖狀態

binlog-checksum:用來校驗binlog是否完整

sort_buffer:排序需要的空間

number_of_tmp_files: 為排序準備的臨時文件數

OPTIMIZER_TRACE:mysql執行過程的跟蹤

Using temporary:explain執行接話結果,需要使用臨時表

Using filesort:explain執行接話結果,需要使用排序

binlog_format:mixed,row,statement

start-position:解析日誌開始的位置

seconds_behind_master:備庫延遲時間

slave_parallel_workers:主備同步的worker線程數

slave_skip_errors:主從同步時跳過錯誤

GTID : Global Transaction Identifie全局事務id

innodb_thread_concurrency:限制並發線程數,建議64到128

performance_schema:mysql一些統計表,包括磁碟利用率等

sql_safe_updates:mysql安全更新參數,delete時不加where條件或者沒有索引會報錯

query_cache_type: 查詢緩存類型

innodb_old_blocks_time:mysql的lru算法分old和young區,此參數用來控制時間閾值

long_query_time: 慢查詢日誌參數

cardinality:索引上不同值的個數基數,也就是區分度

innodb_io_capacity:磁碟的能力參數

innodb_flush_neighbors:刷髒頁是否刷鄰居頁參數

innodb_file_per_table:控制表數據放在共享表空間還是文件中,默認放在.ibd文件

change buffer: 資料庫更新的緩存,在內存中。唯一索引更新用不上

innodb_change_buffer_max_size:change buffer的大小,用buffer pool裡的內存

innodb_flush_log_at_trx_commit:每次事物的redolog是否直接持久化到磁碟

sync_binlog:每次事物的binglog是否持久化到磁碟

wait_timeout:客戶端如果太長時間沒動靜,連接器就會自動將它斷開,默認值是 8 小時。

rows_examined:你會在資料庫的慢查詢日誌中看到一個 的欄位,表示這個語句執行過程中掃描了多少行。這個值就是在執行器每次調用引擎獲取數據行的時候累加的。

net_buffer_length:網絡緩存區長度

join_buffer_size: join緩存區大小

read_rnd_buffer_size: read_rnd_buffer 大小

auto_increment_offset:自增id開始數字

auto_increment_increment:自增id步長

innodb_autoinc_lock_mode:表示語句結束才釋放鎖

命令

prepare: sql語句預處理

show slave status:返回備庫狀態

start slave:從庫開始同步主庫

force index(a):強制使用索引a

show index from t :查看表的索引

analyze table t: 重新統計索引信息

show variables:查看配置

show processlist :查看當前資料庫連接情況

SQL_CACHE:查詢緩存

kill connection:殺掉執行線程

join:如果被驅動表能用上索引,使用join比不使用要好,且要用小表做驅動

show create table:顯示建表語句

查詢優化

explain結果

有join時儘量在extra有Using MRR有join時儘量在extra中沒有BNLUsing index 用到覆蓋索引Using temporary用到臨時表,可能是內存也可能是磁碟,儘量不用Using filesort需要排序,儘量不用group by 時如果不需要結果排序,加上order by null,可以避免排序 如果對欄位用了函數就不能用索引不按照欄位類型查詢,將會用全索引掃描表的欄位字符集儘量統一,否則可能關聯時無法使用索引儘量不用查詢不需要的欄位,無端增加開銷

相關焦點

  • MySQL常用命令
    其中:n是一個正整數,表示返回查詢結果集的前n行;若帶percent關鍵字,則表示返回結果集的前n%行。:between...and和 not between...and。匹配串中通常含有通配符%和_(下劃線)。其中: %:代表任意長度(包括0)的字符串5.使用null的查詢當需要判定一個表達式的值是否為空值時,使用 is null關鍵字。當不使用not時,若表達式的值為空值,則返回true,否則返回false;當使用not時,結果剛好相反。
  • Mysql常用命令大全-整理-精
    i,表示字符只能出現i次;在{}內有一個整型參數i, 」,表示字符可以出現i次或i次以上;在{}內只有一個整型參數i, 」,再跟一個整型參數j,表示字符只能出現i次以上,j次以下 i次和j次)。、mysqldump 備份 是採用SQL級別的備份機制,它將數據表導成 SQL 腳本文件,在不同的 MySQL mysqldump 的一些主要參數: mysqldump,導出的數據將和哪種資料庫或哪個舊版本的 MySQL 伺服器相兼容。
  • 在mysql中如何刪除記錄?delete關鍵字了解一下
    在上一篇文章中我們學習了如何更新mysql中的數據內容,用到的是update這個關鍵字,今天我們要學習的是如何讓在mysql中刪除記錄,也就是從箱子裡面拿走東西,用到的關鍵字是delete這個關鍵字,下面我們就通過一個例子來了解一下。
  • mysql學習詳記六&&關鍵字執行順序&mysql內置函數
    一、關鍵字執行順序1、查詢中用到的關鍵詞主要包含六個,並且他們的順序依次為 :select--from--where--group by--having--order by 其中select和from是必須的,其他關鍵詞是可選的。
  • 滲透mysql資料庫總結
    前言今天給大家總結一下滲透mysql的一些技巧。本文只是點到為止,不會講的太細。的 -e 參數 mysql -u user -p passwd -e &39;&39;/var/www/xxx.php&34;2、利用general_log拿shell如果導入導出被禁用了就可以用這個方法試試。
  • C/C++中常用的編程關鍵字
    關鍵字作用:關鍵字是C++中預先保留的單詞(標識符)在定義變量或者常量時候,不要用關鍵字C++關鍵字如下:1. asmasm (指令字符串):允許在 C++ 程序中嵌入彙編代碼。C++ 中的 bool 類型可以和 int 混用,具體來說就是 0 代表 false,非 0 代表 true。bool 類型常用於條件判斷和函數返回值。4. breakbreak(中斷、跳出),用在switch語句或者循環語句中。程序遇到 break 後,即跳過該程序段,繼續後面的語句執行。
  • MySQL教程之MySQL定時備份資料庫
    一、MySQL數據備份1.1、 mysqldump命令備份數據在MySQL中提供了命令行導出資料庫數據以及文件的一種方便的工具mysqldump,我們可以通過命令行直接實現資料庫內容的導出dump,首先我們簡單了解一下mysqldump命令用法:#MySQLdump常用mysqldump -u root -p --databases
  • linux常用命令總結
    解壓使用unzip ④ tar 命令路徑:/bin/tar 執行權限:所有用戶作用:文件、目錄打(解)包語法:tar [-zcf] 壓縮後文件名 文件或目錄-c 建立一個壓縮文件的參數指令(create),後綴是.tar-x 解開一個壓縮文件的參數指令(extract)-z 以gzip命令壓縮/解壓縮 -j 以bzip2命令壓縮/解壓縮-v 壓縮的過程中顯示文件(verbose)-f
  • MySQL資料庫的操作步驟
    MySQL 資料庫的操作步驟資料庫操作的常用指令1.查看已有庫>show databases;2.創建庫(指定字符集)>create database 庫名 [character set utf8];```sqle.g.
  • 淺析mysql存儲過程
    去年的強網杯,出了一道mysql堆疊注入叫隨便注,這道題被好多比賽玩了一整年,直到現在還是有各種新姿勢,但是今天我忽然想到似乎沒有對這個題目有一個很認真的分析,因此這裡總結一下這個題目的出題用意和原本的預期做法:堆疊注入Stacked injections:
  • MySQL常用的函數
    返回來自於參數連結的字符串。如果任何參數是NULL,返回NULL。可以有超過2個的參數。一個數字參數被變換為等價的字符串形式。這與有2個參數形式的LOCATE()相同,除了參數 被顛倒。  mysql> select PERIOD_ADD(9801,2);  -> 19980316 PERIOD_DIFF(P1,P2)  返回在時期P1和P2之間月數,P1和P2應該以格式YYMM或YYYYMM。注意,時期參數P1和P2不是日期值。
  • Mysql各種存儲引擎對比總結(常用幾種)
    存儲引擎是資料庫的核心,對於mysql來說,存儲引擎是以插件的形式運行的。雖然mysql支持種類繁多的存儲引擎,但是常用的就那麼幾種。這篇文章主要是對其進行一個總結和對比。一、引言在mysql5之後,支持的存儲引擎有十幾個,但是常用的就那麼幾種,而且默認支持的也是InnoDB,既然要進行一個對比,我們就要從不同的維度來看一下。
  • mysql常用命令手冊
    來源:SQL資料庫開發之前介紹了一系列的mysql基礎知識,今天我們將MySQL常用的功能命令整理出來>A:常用source 命令 進入mysql資料庫控制臺, 如mysql -u root -p mysql>use 資料庫 然後使用source命令,後面參數為腳本文件(如這裡用到的.sql) mysql>source wcnc_db.sql B:使用mysqldump命令 mysqldump -u username
  • MySQL - mysqldump 命令參數
    mysqldump是MySQL自帶的用於轉存儲資料庫的程序。mysqldump有很多參數,但是常用的就那麼幾個。--all-databases , -A導出所有的庫裡面的數據。--compress, -C在客戶端和伺服器之間啟用壓縮傳遞所有信息--create-options, -a在CREATE TABLE語句中包括所有MySQL特性選項。(默認為打開狀態)--databases, -B導出幾個資料庫。參數後面所有名字參量都被看作資料庫名。
  • nginx,apache,mysql和php的編譯參數
    linux軟體升級,怎麼查看nginx,apache,mysql和php的編譯參數linux下有時候軟體升級,nginx,apache,mysql,php看看編譯參數可以用以下方法>查看nginx編譯參數,很簡單:root@ubuntu:~# nginx -Vnginx: nginx version: nginx/1.0.8nginx: built
  • MySQL數據定義語言(DDL),入門掌握這些足夠了
    常用的語句關鍵字主要包括create、drop、alter等創建資料庫語法:create database dbnamemysql> create database test1;mysql> create database test1 DEFAULT CHARACTER SET utf8;創建默認gbk字符集的資料庫可以用下面的sql
  • MySQL 的啟動和連接方式
    另外,mysqld_safe啟動方式也會把運行過程的報錯日誌和其它一些診斷信息輸出到某一個文件中,這樣方便我們排查解決問題。這個啟動方式是最常用的方式。命令格式:mysqld_multi [OPTIONS]{start|reload|stop|report}[GNR,GNR,GNR...]查看幫助:mysqld_multi --help方式4:mysql.servermysql.server也是一個啟動腳本,它會間接的調用mysqld_safe,在調用mysql.server時在後邊指定start參數就可以啟動伺服器程序了
  • Java 中 volatile 關鍵字的最全總結
    Java內存模型中的有序性可以總結為:如果在本線程內觀察,所有操作都是有序的;如果在一個線程中觀察另一個線程,所有操作都是無序的。前半句是指「線程內表現為串行語義」,後半句是指「指令重排序」現象和「工作內存主主內存同步延遲」現象。
  • python的關鍵字參數和怎樣為參數設置默認值
    #程式語言#第八十八節:關鍵字參數和為參數設置默認值關於Python函數中的位置參數接著前面的內容,今天學習的有兩項:關鍵字參數和為參數設置默認值首先來看關鍵字參數。關鍵字參數是指使用形式參數的名字來確定輸入的參數值。這句話可以這樣理解:在執行函數的時候,使用創建函數時使用的形式參數名字來直接指定參數的值。
  • 關於MySQL參數,這些你要知道
    前言:在前面一些文章中,經常能看到介紹某某參數的作用,可能有些小夥伴仍搞不清楚 MySQL 參數是啥。本篇文章我們來聊聊 MySQL 參數,學習下如何管理維護 MySQL 參數。系統變量分為全局系統變量(global)和會話系統變量(session)。有些變量既有全局變量又有會話變量,有些變量只有全局變量。全局變量影響伺服器的全局操作,會話變量只影響具體客戶端連接相關操作。若會話變量未單獨設置,則繼承自相應全局變量。