持續(xù)輸出面試題系列之MySQL篇

開(kāi)篇介紹

大家好,我是Java最全面試題庫(kù)的提褲姐,今天這篇是數(shù)據(jù)庫(kù)面試題系列的第一篇,主要總結(jié)了MySQL相關(guān)的面試題;在后續(xù),會(huì)沿著第一篇開(kāi)篇的知識(shí)線路一直總結(jié)下去,做到日更!如果我能做到百日百更,希望你也可以跟著百日百刷,一百天養(yǎng)成一個(gè)好習(xí)慣。

SQL 的 select 語(yǔ)句完整的執(zhí)行順序?

1、from 子句組裝來(lái)自不同數(shù)據(jù)源的數(shù)據(jù);
2、where 子句基于指定的條件對(duì)記錄行進(jìn)行篩選;
3、group by 子句將數(shù)據(jù)劃分為多個(gè)分組;
4、使用聚集函數(shù)進(jìn)行計(jì)算;
5、使用 having 子句篩選分組;
6、計(jì)算所有的表達(dá)式;
7、select 的字段;
8、使用 order by 對(duì)結(jié)果集進(jìn)行排序。

左連接和右連接的區(qū)別?

外連接:

  • 左連接(左外連接):以左表作為基準(zhǔn)進(jìn)行查詢(xún),左表數(shù)據(jù)會(huì)全部顯示出來(lái),右表如果和左表匹配的
    數(shù)據(jù)則顯示相應(yīng)字段的數(shù)據(jù),如果不匹配則顯示為 null。
  • 右連接(右外連接):以右表作為基準(zhǔn)進(jìn)行查詢(xún),右表數(shù)據(jù)會(huì)全部顯示出來(lái),左表如果和右表匹配的
    數(shù)據(jù)則顯示相應(yīng)字段的數(shù)據(jù),如果不匹配則顯示為 null。

全連接:
先以左表進(jìn)行左外連接,再以右表進(jìn)行右外連接

內(nèi)連接:
顯示表之間有連接匹配的所有行。

什么是sql注入?如何防止sql注入?

sql注入
通過(guò)在 Web 表單中輸入(惡意)SQL 語(yǔ)句得到一個(gè)存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫(kù),而不是按照設(shè)計(jì)者意圖去執(zhí)行 SQL 語(yǔ)句。
舉例:當(dāng)執(zhí)行的 sql 為 select * from user where username = "admin" or "a"="a"時(shí),sql 語(yǔ)句恒成立,參數(shù) admin 毫無(wú)意義。

防止 sql 注入的方式:

  1. 預(yù)編譯語(yǔ)句:如,select * from user where username = ?,sql 語(yǔ)句語(yǔ)義不會(huì)發(fā)生改變,sql 語(yǔ)句中變量用?表示,即使傳遞參數(shù)時(shí)為"admin or 'a'= 'a'",也會(huì)把這整體當(dāng)做一個(gè)字符創(chuàng)去查詢(xún)。
  2. Mybatis 框架中的 mapper 方式中的 # 也能很大程度的防止 sql 注入($無(wú)法防止 sql 注入)。

有哪些sql優(yōu)化方法?

1、當(dāng)只要一行數(shù)據(jù)時(shí)使用 limit 1
查詢(xún)時(shí)如果已知會(huì)得到一條數(shù)據(jù),這種情況下加上 limit 1 會(huì)增加性能。因?yàn)?mysql 數(shù)據(jù)庫(kù)引擎會(huì)在找到一條結(jié)果停止搜索,而不是繼續(xù)查詢(xún)下一條是否符合標(biāo)準(zhǔn)直到所有記錄查詢(xún)完畢。

2、選擇正確的數(shù)據(jù)庫(kù)引擎
Mysql 中有兩個(gè)引擎 MyISAMInnoDB,每個(gè)引擎有利有弊。

①M(fèi)yISAM 適用于一些大量查詢(xún)的應(yīng)用,但對(duì)于有大量寫(xiě)功能的應(yīng)用不是很好。甚至你只需要update 一個(gè)字段整個(gè)表都會(huì)被鎖起來(lái)。而別的進(jìn)程就算是讀操作也不行要等到當(dāng)前 update 操作完成之后才能繼續(xù)進(jìn)行。另外,MyISAM 對(duì)于 select count(*)這類(lèi)操作是超級(jí)快的。
②InnoDB 的趨勢(shì)會(huì)是一個(gè)非常復(fù)雜的存儲(chǔ)引擎,對(duì)于一些小的應(yīng)用會(huì)比 MyISAM 還慢,但是支持“行鎖”,所以在寫(xiě)操作比較多的時(shí)候會(huì)比較優(yōu)秀。并且,它支持很多的高級(jí)應(yīng)用,例如:事務(wù)。

  1. not exists 代替 not in
    Not exists 用到了連接能夠發(fā)揮已經(jīng)建立好的索引的作用,not in 不能使用索引。Not in 是最慢的方式要同每條記錄比較,在數(shù)據(jù)量比較大的操作時(shí)不建議使用這種方式。

  2. 對(duì)操作符的優(yōu)化,盡量不采用不利于索引的操作符
    如:in not in is null is not null <>
    某個(gè)字段總要拿來(lái)搜索,為其建立索引:
    Mysql 中使用 alter table 語(yǔ)句來(lái)為表中的字段添加索引:alter table 表明 add index (字段名)

Mysql 存儲(chǔ)引擎有哪些?

1.InnoDB 存儲(chǔ)引擎
InnoDB 是事務(wù)型數(shù)據(jù)庫(kù)的首選引擎,支持事務(wù)安全表(ACID),支持行鎖定和外鍵,InnoDB 是默認(rèn)的MySQL引擎。
2.MyISAM 存儲(chǔ)引擎
MyISAM 基于 ISAM 存儲(chǔ)引擎,并對(duì)其進(jìn)行擴(kuò)展。它是在 Web、數(shù)據(jù)倉(cāng)儲(chǔ)和其他應(yīng)用環(huán)境下最常使用的存儲(chǔ)引擎之一。MyISAM 擁有較高的插入、查詢(xún)速度,但不支持事物。
3.MEMORY 存儲(chǔ)引擎
MEMORY 存儲(chǔ)引擎將表中的數(shù)據(jù)存儲(chǔ)到內(nèi)存中,未查詢(xún)和引用其他表數(shù)據(jù)提供快速訪問(wèn)。
4.NDB 存儲(chǔ)引擎
DB 存儲(chǔ)引擎是一個(gè)集群存儲(chǔ)引擎,類(lèi)似于 Oracle 的 RAC,但它是 Share Nothing 的架構(gòu),因此能提供更高級(jí)別的高可用性和可擴(kuò)展性。NDB 的特點(diǎn)是數(shù)據(jù)全部放在內(nèi)存中,因此通過(guò)主鍵查找非常快。
關(guān)于 NDB,有一個(gè)問(wèn)題需要注意,它的連接(join)操作是在 MySQL 數(shù)據(jù)庫(kù)層完成,不是在存儲(chǔ)引擎層完成,這意味著,復(fù)雜的 join 操作需要巨大的網(wǎng)絡(luò)開(kāi)銷(xiāo),查詢(xún)速度會(huì)很慢。
5.Memory (Heap) 存儲(chǔ)引擎
Memory 存儲(chǔ)引擎(之前稱(chēng)為 Heap)將表中數(shù)據(jù)存放在內(nèi)存中,如果數(shù)據(jù)庫(kù)重啟或崩潰,數(shù)據(jù)丟失,因此它非常適合存儲(chǔ)臨時(shí)數(shù)據(jù)。
6.Archive 存儲(chǔ)引擎
正如其名稱(chēng)所示,Archive 非常適合存儲(chǔ)歸檔數(shù)據(jù),如日志信息。它只支持 INSERT 和 SELECT 操作,其設(shè)計(jì)的主要目的是提供高速的插入和壓縮功能。
7.Federated 存儲(chǔ)引擎
Federated 存儲(chǔ)引擎不存放數(shù)據(jù),它至少指向一臺(tái)遠(yuǎn)程 MySQL 數(shù)據(jù)庫(kù)服務(wù)器上的表,非常類(lèi)似于 Oracle 的透明網(wǎng)關(guān)。
8.Maria 存儲(chǔ)引擎
Maria 存儲(chǔ)引擎是新開(kāi)發(fā)的引擎,其設(shè)計(jì)目標(biāo)是用來(lái)取代原有的 MyISAM 存儲(chǔ)引擎,從而成為 MySQL 默認(rèn)
的存儲(chǔ)引擎。

上述引擎中,InnoDB 是事務(wù)安全的存儲(chǔ)引擎,設(shè)計(jì)上借鑒了很多 Oracle 的架構(gòu)思想,一般而言,在 OLTP
應(yīng)用中,InnoDB 應(yīng)該作為核心應(yīng)用表的首先存儲(chǔ)引擎。InnoDB 是由第三方的 Innobase Oy 公司開(kāi)發(fā),現(xiàn)已被Oracle 收購(gòu),創(chuàng)始人是 Heikki Tuuri,芬蘭赫爾辛基人,和著名的 Linux 創(chuàng)始人 Linus 是校友。

事務(wù)的四大特征是什么?

數(shù)據(jù)庫(kù)事務(wù) transanction 正確執(zhí)行的四個(gè)基本要素。ACID,原子性(Atomicity)、一致性(Correspondence)、隔離性(Isolation)、持久性(Durability)。
原子性:整個(gè)事務(wù)中的所有操作,要么全部完成,要么全部不完成,不可能停滯在中間某個(gè)環(huán)節(jié)。事務(wù)在執(zhí)
行過(guò)程中發(fā)生錯(cuò)誤,會(huì)被回滾(Rollback)到事務(wù)開(kāi)始前的狀態(tài),就像這個(gè)事務(wù)從來(lái)沒(méi)有執(zhí)行過(guò)一樣。
一致性:在事務(wù)開(kāi)始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫(kù)的完整性約束沒(méi)有被破壞。
隔離性:隔離狀態(tài)執(zhí)行事務(wù),使它們好像是系統(tǒng)在給定時(shí)間內(nèi)執(zhí)行的唯一操作。如果有兩個(gè)事務(wù),運(yùn)行在相
同的時(shí)間內(nèi),執(zhí)行 相同的功能,事務(wù)的隔離性將確保每一事務(wù)在系統(tǒng)中認(rèn)為只有該事務(wù)在使用系統(tǒng)。這種屬性有時(shí)稱(chēng)為串行化,為了防止事務(wù)操作間的混淆, 必須串行化或序列化請(qǐng) 求,使得在同一時(shí)間僅有一個(gè)請(qǐng)求用于同一數(shù)據(jù)。
持久性:在事務(wù)完成以后,該事務(wù)所對(duì)數(shù)據(jù)庫(kù)所作的更改便持久的保存在數(shù)據(jù)庫(kù)之中,并不會(huì)被回滾。

MySQL 索引的“使用”注意事項(xiàng)

1.避免在 WHERE 子句中使用!=<>操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描。優(yōu)化器將無(wú)法通過(guò)索引來(lái)確定將要命中的行數(shù),因此需要搜索該表的所有行。

2.避免在 WHERE 子句中使用 OR 來(lái)連接條件,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如:SELECT id FROM t WHERE num = 10 OR num = 20

3.避免在 WHERE 子句中對(duì)字段進(jìn)行表達(dá)式操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。

4.避免在 WHERE 子句中對(duì)字段進(jìn)行函數(shù)操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。

5.LIKE 查詢(xún),% 不能在前,因?yàn)闊o(wú)法使用索引。如果需要模糊匹配,可以使用全文索引。

為什么mysql建議使用自增主鍵?

1、如果我們定義了主鍵(PRIMARY KEY),那么InnoDB會(huì)選擇主鍵作為聚集索引。
如果沒(méi)有顯式定義主鍵,則InnoDB會(huì)選擇第一個(gè)不包含有NULL值的唯一索引作為主鍵索引。
如果也沒(méi)有這樣的唯一索引,則InnoDB會(huì)選擇內(nèi)置6字節(jié)長(zhǎng)的ROWID作為隱含的聚集索引(ROWID隨著行記錄的寫(xiě)入而主鍵遞增,這個(gè)ROWID不像ORACLE的ROWID那樣可引用,是隱含的)。

2、數(shù)據(jù)記錄本身被存于主索引(一顆B+Tree)的葉子節(jié)點(diǎn)上,這就要求同一個(gè)葉子節(jié)點(diǎn)內(nèi)(大小為一個(gè)內(nèi)存頁(yè)或磁盤(pán)頁(yè))的各條數(shù)據(jù)記錄按主鍵順序存放。
因此每當(dāng)有一條新的記錄插入時(shí),MySQL會(huì)根據(jù)其主鍵將其插入適當(dāng)?shù)墓?jié)點(diǎn)和位置,如果頁(yè)面達(dá)到裝載因子(InnoDB默認(rèn)為15/16),則開(kāi)辟一個(gè)新的頁(yè)(節(jié)點(diǎn))

3、如果表使用自增主鍵,那么每次插入新的記錄,記錄就會(huì)順序添加到當(dāng)前索引節(jié)點(diǎn)的后續(xù)位置,當(dāng)一頁(yè)寫(xiě)滿(mǎn),就會(huì)自動(dòng)開(kāi)辟一個(gè)新的頁(yè)。

4、如果使用非自增主鍵(如果身份證號(hào)或?qū)W號(hào)等),由于每次插入主鍵的值近似于隨機(jī),因此每次新紀(jì)錄都要被插到現(xiàn)有索引頁(yè)得中間某個(gè)位置,此時(shí)MySQL不得不為了將新記錄插到合適位置而移動(dòng)數(shù)據(jù),甚至目標(biāo)頁(yè)面可能已經(jīng)被回寫(xiě)到磁盤(pán)上而從緩存中清掉,此時(shí)又要從磁盤(pán)上讀回來(lái),這增加了很多開(kāi)銷(xiāo),同時(shí)頻繁的移動(dòng)、分頁(yè)操作造成了大量的碎片,得到了不夠緊湊的索引結(jié)構(gòu),后續(xù)不得不通過(guò)OPTIMIZE TABLE來(lái)重建表并優(yōu)化填充頁(yè)面。

mysql rr級(jí)別如何解決幻讀問(wèn)題?

該隔離級(jí)別是 MySQL 默認(rèn)的隔離級(jí)別,在同一個(gè)事務(wù)里,select 的結(jié)果是事務(wù)開(kāi)始時(shí)時(shí)間點(diǎn)的狀態(tài),因此,同樣的 select 操作讀到的結(jié)果會(huì)是一致的,但是,會(huì)有幻讀現(xiàn)象。
MySQL 的 InnoDB 引擎可以通過(guò) next-key locks 機(jī)制來(lái)避免幻讀。 InnoDB 存儲(chǔ)引擎使用三種行鎖的算法用來(lái)滿(mǎn)足相關(guān)事務(wù)隔離級(jí)別的要求:
Record Locks
該鎖為索引記錄上的鎖,如果表中沒(méi)有定義索引,InnoDB 會(huì)默認(rèn)為該表創(chuàng)建一個(gè)隱藏的聚簇索引,并使用該索引鎖定記錄。

Gap Locks
該鎖會(huì)鎖定一個(gè)范圍,但是不括記錄本身。可以通過(guò)修改隔離級(jí)別為 READ COMMITTED 或者配置 innodb_locks_unsafe_for_binlog 參數(shù)為 ON

Next-key Locks
該鎖就是 Record LocksGap Locks 的組合,即鎖定一個(gè)范圍并且鎖定該記錄本身。InnoDB 使用 Next-key Locks 解決幻讀問(wèn)題。需要注意的是,如果索引有唯一屬性,則 InnnoDB 會(huì)自動(dòng)將 Next-key Locks 降級(jí)為 Record Locks。

舉例:如果一個(gè)索引有 1, 3, 5 三個(gè)值,則該索引鎖定的區(qū)間為 (-∞,1], (1,3], (3,5], (5,+ ∞)。

MySQL 主從復(fù)制的流程是怎么樣的?

1、Master 上面的 binlog dump 線程,該線程負(fù)責(zé)將 master 的 binlog event 傳到 slave
2、Slave 上面的 IO 線程,該線程負(fù)責(zé)接收 Master 傳過(guò)來(lái)的 binlog,并寫(xiě)入 relay log
3、Slave 上面的 SQL 線程,該線程負(fù)責(zé)讀取 relay log 并執(zhí)行。
4、如果是多線程復(fù)制,無(wú)論是 5.6 庫(kù)級(jí)別的假多線程還是 MariaDB 或者 5.7 的真正的多線程復(fù)制, SQL 線程只做 coordinator ,只負(fù)責(zé)把 relay log 中的 binlog 讀出來(lái)然后交給 worker 線程, woker 線程負(fù)責(zé)具體 binlog event 的執(zhí)行。

Mysql 中 MyISAM 和 InnoDB 的區(qū)別有哪些?

1、InnoDB支持事務(wù),MyISAM不支持
對(duì)于InnoDB每一條SQL語(yǔ)言都默認(rèn)封裝成事務(wù),自動(dòng)提交,這樣會(huì)影響速度,所以最好把多條SQL語(yǔ)言放在begin和commit之間,組成一個(gè)事務(wù);

2、InnoDB支持外鍵,而MyISAM不支持。對(duì)一個(gè)包含外鍵的InnoDB表轉(zhuǎn)為MYISAM會(huì)失敗;

3、InnoDB是聚集索引,數(shù)據(jù)文件是和索引綁在一起的,必須要有主鍵,通過(guò)主鍵索引效率很高。
但是輔助索引需要兩次查詢(xún),先查詢(xún)到主鍵,然后再通過(guò)主鍵查詢(xún)到數(shù)據(jù)。因此主鍵不應(yīng)該過(guò)大,因?yàn)橹麈I太大,其他索引也都會(huì)很大。
而MyISAM是非聚集索引,數(shù)據(jù)文件是分離的,索引保存的是數(shù)據(jù)文件的指針。主鍵索引和輔助索引是獨(dú)立的。

4、InnoDB不保存表的具體行數(shù),執(zhí)行select count(*) from table時(shí)需要全表掃描。而MyISAM用一個(gè)變量保存了整個(gè)表的行數(shù),執(zhí)行上述語(yǔ)句時(shí)只需要讀出該變量即可,速度很快;

5、Innodb不支持全文索引,而MyISAM支持全文索引,查詢(xún)效率上MyISAM要高;

mysql事務(wù)隔離級(jí)別?

Read Uncommitted(讀取未提交內(nèi)容)
在該隔離級(jí)別,所有事務(wù)都可以看到其他未提交事務(wù)的執(zhí)行結(jié)果。本隔離級(jí)別很少用于實(shí)際應(yīng)用,因?yàn)樗男阅芤膊槐绕渌?jí)別好多少。讀取未提交的數(shù)據(jù),也被稱(chēng)之為臟讀(Dirty Read)。

Read Committed(讀取提交內(nèi)容)
這是大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)的默認(rèn)隔離級(jí)別(但不是MySQL默認(rèn)的)。它滿(mǎn)足了隔離的簡(jiǎn)單定義:一個(gè)事務(wù)只能看見(jiàn)已經(jīng)提交事務(wù)所做的改變。這種隔離級(jí)別 也支持所謂的不可重復(fù)讀(Nonrepeatable Read),因?yàn)橥皇聞?wù)的其他實(shí)例在該實(shí)例處理其間可能會(huì)有新的commit,所以同一select可能返回不同結(jié)果。

Repeatable Read(可重讀)
這是MySQL的默認(rèn)事務(wù)隔離級(jí)別,它確保同一事務(wù)的多個(gè)實(shí)例在并發(fā)讀取數(shù)據(jù)時(shí),會(huì)看到同樣的數(shù)據(jù)行。不過(guò)理論上,這會(huì)導(dǎo)致另一個(gè)棘手的問(wèn)題:幻讀 (Phantom Read)。簡(jiǎn)單的說(shuō),幻讀指當(dāng)用戶(hù)讀取某一范圍的數(shù)據(jù)行時(shí),另一個(gè)事務(wù)又在該范圍內(nèi)插入了新行,當(dāng)用戶(hù)再讀取該范圍的數(shù)據(jù)行時(shí),會(huì)發(fā)現(xiàn)有新的“幻影” 行。

InnoDB和Falcon存儲(chǔ)引擎通過(guò)多版本并發(fā)控制(MVCC,Multiversion Concurrency Control)機(jī)制解決了該問(wèn)題。

Serializable(可串行化)
這是最高的隔離級(jí)別,它通過(guò)強(qiáng)制事務(wù)排序,使之不可能相互沖突,從而解決幻讀問(wèn)題。簡(jiǎn)言之,它是在每個(gè)讀的數(shù)據(jù)行上加上共享鎖。在這個(gè)級(jí)別,可能導(dǎo)致大量的超時(shí)現(xiàn)象和鎖競(jìng)爭(zhēng)。

MVCC流程?

mvcc根據(jù)undo log來(lái)實(shí)現(xiàn)
RR級(jí)別下,事務(wù)中的第一個(gè)SELECT請(qǐng)求才開(kāi)始創(chuàng)建read view
RC級(jí)別下,事務(wù)中每次SELECT請(qǐng)求都會(huì)重新創(chuàng)建read view

ReadView 中是當(dāng)前活躍的事務(wù) ID 列表,稱(chēng)之為 m_ids,其中最小值為 up_limit_id,最大值為 low_limit_id,事務(wù) ID 是事務(wù)開(kāi)啟時(shí) InnoDB 分配的,其大小決定了事務(wù)開(kāi)啟的先后順序,因此我們可以通過(guò) ID 的大小關(guān)系來(lái)決定版本記錄的可見(jiàn)性,具體判斷流程如下:

  • 如果被訪問(wèn)版本的 trx_id 小于 m_ids 中的最小值 up_limit_id,說(shuō)明生成該版本的事務(wù)在 ReadView 生成前就已經(jīng)提交了,所以該版本可以被當(dāng)前事務(wù)訪問(wèn)。

  • 如果被訪問(wèn)版本的 trx_id 大于 m_ids 列表中的最大值 low_limit_id,說(shuō)明生成該版本的事務(wù)在生成 ReadView 后才生成,所以該版本不可以被當(dāng)前事務(wù)訪問(wèn)。需要根據(jù) Undo Log 鏈找到前一個(gè)版本,然后根據(jù)該版本的 DB_TRX_ID 重新判斷可見(jiàn)性。

  • 如果被訪問(wèn)版本的 trx_id 屬性值在 m_ids 列表中最大值和最小值之間(包含),那就需要判斷一下 trx_id 的值是不是在 m_ids 列表中。如果在,說(shuō)明創(chuàng)建 ReadView 時(shí)生成該版本所屬事務(wù)還是活躍的,因此該版本不可以被訪問(wèn),需要查找 Undo Log 鏈得到上一個(gè)版本,然后根據(jù)該版本的 DB_TRX_ID 再?gòu)念^計(jì)算一次可見(jiàn)性;如果不在,說(shuō)明創(chuàng)建 ReadView 時(shí)生成該版本的事務(wù)已經(jīng)被提交,該版本可以被訪問(wèn)。

此時(shí)經(jīng)過(guò)一系列判斷我們已經(jīng)得到了這條記錄相對(duì) ReadView 來(lái)說(shuō)的可見(jiàn)結(jié)果。此時(shí),如果這條記錄的 delete_flag 為 true,說(shuō)明這條記錄已被刪除,不返回。否則說(shuō)明此記錄可以安全返回給客戶(hù)端。

mysql什么時(shí)候會(huì)出現(xiàn)數(shù)據(jù)頁(yè)預(yù)讀?

1、有一個(gè)參數(shù)是innodb_read_ahead_threshold,他的默認(rèn)值是56,意思就是如果順序的訪問(wèn)了一個(gè)區(qū)里的多個(gè)數(shù)據(jù)頁(yè),訪問(wèn)的數(shù)據(jù)頁(yè)的數(shù)量超過(guò)了這個(gè)閾值,此時(shí)就會(huì)觸發(fā)預(yù)讀機(jī)制,把下一個(gè)相鄰區(qū)中的所有數(shù)據(jù)頁(yè)都加載到緩存里去

2、如果Buffer Pool里緩存了一個(gè)區(qū)里的13個(gè)連續(xù)的數(shù)據(jù)頁(yè),而且這些數(shù)據(jù)頁(yè)都是比較頻繁會(huì)被訪問(wèn)的,此時(shí)就會(huì) 直接觸發(fā)預(yù)讀機(jī)制,把這個(gè)區(qū)里的其他的數(shù)據(jù)頁(yè)都加載到緩存里去 這個(gè)機(jī)制是通過(guò)參數(shù)innodb_random_read_ahead來(lái)控制的,他默認(rèn)是OFF,也就是這個(gè)規(guī)則是關(guān)閉的

3、全表掃描

mysql有哪些binlog錄入格式?

  • statement,statement模式下,記錄單元為語(yǔ)句。即每一個(gè)sql造成的影響會(huì)記錄。由于sql的執(zhí)行是有上下文的,因此在保存的時(shí)候需要保存相關(guān)的信息,同時(shí)還有一些使用了函數(shù)之類(lèi)的語(yǔ)句無(wú)法被記錄復(fù)制。

  • row,row級(jí)別下,記錄單元為每一行的改動(dòng),基本是可以全部記下來(lái)但是由于很多操作,會(huì)導(dǎo)致大量行的改動(dòng)(比如alter table),因此這種模式的文件保存的信息太多,日志量太大。

  • mixed,一種折中的方案,普通操作使用statement記錄,當(dāng)無(wú)法使用statement的時(shí)候使用row。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評(píng)論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,676評(píng)論 3 419
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,730評(píng)論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,118評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,873評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,266評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評(píng)論 3 443
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,482評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,036評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,846評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,025評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,279評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,684評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,953評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,751評(píng)論 3 394
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,016評(píng)論 2 375