国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

MySQL十道面試題

共 13356字,需瀏覽 27分鐘

 ·

2020-12-15 08:54


本文公眾號來源:sowhat1412

作者:sowhat1412

本文已收錄至我的GitHub

攻擊性不大,侮辱性極強

1、SQL語句執(zhí)行流程

MySQL大體上可分為Server層存儲引擎層兩部分。

Server層:
  • 連接器:TCP握手后服務器來驗證登陸用戶身份,A用戶創(chuàng)建連接后,管理員對A用戶權(quán)限修改了也不會影響到已經(jīng)創(chuàng)建的鏈接權(quán)限,必須重新登陸。
  • 查詢緩存:查詢后的結(jié)果存儲位置,MySQL8.0版本以后已經(jīng)取消,因為查詢緩存失效太頻繁,得不償失。
  • 分析器:根據(jù)語法規(guī)則,判斷你輸入的這個SQL語句是否滿足MySQL語法。
  • 優(yōu)化器:多種執(zhí)行策略可實現(xiàn)目標,系統(tǒng)自動選擇最優(yōu)進行執(zhí)行。
  • 執(zhí)行器:判斷是否有權(quán)限,將最終任務提交到存儲引擎。
存儲引擎層

負責數(shù)據(jù)的存儲和提取。其架構(gòu)模式是插件式的,支持InnoDBMyISAM、Memory等多個存儲引擎。現(xiàn)在最常用的存儲引擎是InnoDB,它從MySQL 5.5.5版本開始成為了默認存儲引擎(經(jīng)常用的也是這個)。


SQL執(zhí)行順序

2、BinLog、RedoLog、UndoLog

BinLog

BinLog是記錄所有數(shù)據(jù)庫表結(jié)構(gòu)變更(例如create、alter table)以及表數(shù)據(jù)修改(insert、update、delete)的二進制日志,主從數(shù)據(jù)庫同步用到的都是BinLog文件。BinLog日志文件有三種模式。

STATEMENT 模式

內(nèi)容:binlog 只會記錄可能引起數(shù)據(jù)變更的 sql 語句

優(yōu)勢:該模式下,因為沒有記錄實際的數(shù)據(jù),所以日志量和 IO 都消耗很低,性能是最優(yōu)的

劣勢:但有些操作并不是確定的,比如 uuid() 函數(shù)會隨機產(chǎn)生唯一標識,當依賴 binlog 回放時,該操作生成的數(shù)據(jù)與原數(shù)據(jù)必然是不同的,此時可能造成無法預料的后果。

ROW 模式

內(nèi)容:在該模式下,binlog 會記錄每次操作的源數(shù)據(jù)與修改后的目標數(shù)據(jù),StreamSets就要求該模式。

優(yōu)勢:可以絕對精準的還原,從而保證了數(shù)據(jù)的安全與可靠,并且復制和數(shù)據(jù)恢復過程可以是并發(fā)進行的

劣勢:缺點在于 binlog 體積會非常大,同時,對于修改記錄多、字段長度大的操作來說,記錄時性能消耗會很嚴重。閱讀的時候也需要特殊指令來進行讀取數(shù)據(jù)。

MIXED 模式

內(nèi)容:是對上述STATEMENT 跟 ROW ?兩種模式的混合使用。

細節(jié):對于絕大部分操作,都使用 STATEMENT 來進行 binlog 的記錄,只有以下操作使用 ROW 來實現(xiàn):表的存儲引擎為 NDB,使用了uuid() 等不確定函數(shù),使用了 insert delay 語句,使用了臨時表

主從同步流程

1、主節(jié)點必須啟用二進制日志,記錄任何修改了數(shù)據(jù)庫數(shù)據(jù)的事件。

2、從節(jié)點開啟一個線程(I/O Thread)把自己扮演成 mysql 的客戶端,通過 mysql 協(xié)議,請求主節(jié)點的二進制日志文件中的事件 。

3、主節(jié)點啟動一個線程(dump Thread),檢查自己二進制日志中的事件,跟對方請求的位置對比,如果不帶請求位置參數(shù),則主節(jié)點就會從第一個日志文件中的第一個事件一個一個發(fā)送給從節(jié)點。

4、從節(jié)點接收到主節(jié)點發(fā)送過來的數(shù)據(jù)把它放置到中繼日志(Relay log)文件中。并記錄該次請求到主節(jié)點的具體哪一個二進制日志文件內(nèi)部的哪一個位置(主節(jié)點中的二進制文件會有多個)。

5、從節(jié)點啟動另外一個線程(sql Thread ),把 Relay log 中的事件讀取出來,并在本地再執(zhí)行一次。

mysql默認的復制方式是異步的,并且復制的時候是有并行復制能力的。主庫把日志發(fā)送給從庫后不管了,這樣會產(chǎn)生一個問題就是假設(shè)主庫掛了,從庫處理失敗了,這時候從庫升為主庫后,日志就丟失了。由此產(chǎn)生兩個概念。

  1. 全同步復制

主庫寫入binlog后強制同步日志到從庫,所有的從庫都執(zhí)行完成后才返回給客戶端,但是很顯然這個方式的話性能會受到嚴重影響。

  1. 半同步復制

半同步復制的邏輯是這樣,從庫寫入日志成功后返回ACK確認給主庫,主庫收到至少一個從庫的確認就認為寫操作完成。

還可以延伸到由于主從配置不一樣、主庫大事務、從庫壓力過大、網(wǎng)絡震蕩等造成主備延遲,如何避免這個問題?主備切換的時候用可靠性優(yōu)先原則還是可用性優(yōu)先原則?如何判斷主庫Crash了?互為主備情況下如何避免主備循環(huán)復制?被刪庫跑路了如何正確恢復?(⊙o⊙)… 感覺越來越扯到DBA的活兒上去了。

RedoLog

可以先通過下面demo理解:

飯點記賬可以把賬單寫在賬本上也可以寫在粉板上。有人賒賬或者還賬的話,一般有兩種做法:

1、直接把賬本翻出來,把這次賒的賬加上去或者扣除掉。

2、先在粉板上記下這次的賬,等打烊以后再把賬本翻出來核算。

生意忙時選后者,因為前者太麻煩了。得在密密麻麻的記錄中找到這個人的賒賬總額信息,找到之后再拿出算盤計算,最后再將結(jié)果寫回到賬本上。

同樣在MySQL中如果每一次的更新操作都需要寫進磁盤,然后磁盤也要找到對應的那條記錄,然后再更新,整個過程IO成本、查找成本都很高。而粉板和賬本配合的整個過程就是MySQL用到的是Write-Ahead Logging 技術(shù),它的關(guān)鍵點就是先寫日志,再寫磁盤。此時賬本 = BinLog,粉板 = RedoLog。

1、 記錄更新時,InnoDB引擎就會先把記錄寫到RedoLog(粉板)里面,并更新內(nèi)存。同時,InnoDB引擎會在空閑時將這個操作記錄更新到磁盤里面。

2、 如果更新太多RedoLog處理不了的時候,需先將RedoLog部分數(shù)據(jù)寫到磁盤,然后擦除RedoLog部分數(shù)據(jù)。RedoLog類似轉(zhuǎn)盤。

RedoLog有write poscheckpoint

write pos :是當前記錄的位置,一邊寫一邊后移,寫到第3號文件末尾后就回到0號文件開頭。

check point:是當前要擦除的位置,也是往后推移并且循環(huán)的,擦除記錄前要把記錄更新到數(shù)據(jù)文件。

write pos和check point之間的是粉板上還空著的部分,可以用來記錄新的操作。如果write pos追上checkpoint,表示粉板滿了,這時候不能再執(zhí)行新的更新,得停下來先擦掉一些記錄,把checkpoint推進一下。

有了redo log,InnoDB就可以保證即使數(shù)據(jù)庫發(fā)生異常重啟,之前提交的記錄都不會丟失,這個能力稱為crash-saferedolog兩階段提交:為了讓binlog跟redolog兩份日志之間的邏輯一致。提交流程大致如下:

1 prepare階段 --> ?2 寫binlog ?--> 3 commit

  1. 當在2之前崩潰時,重啟恢復后發(fā)現(xiàn)沒有commit,回滾。備份恢復:沒有binlog 。一致
  2. 當在3之前崩潰時,重啟恢復發(fā)現(xiàn)雖沒有commit,但滿足prepare和binlog完整,所以重啟后會自動commit。備份:有binlog. 一致

binlog跟redolog區(qū)別

  1. redo log是InnoDB引擎特有的;binlog是MySQL的Server層實現(xiàn)的,所有引擎都可以使用。
  2. redo log是物理日志,記錄的是在某個數(shù)據(jù)頁上做了什么修改;binlog是邏輯日志,記錄的是這個語句的原始邏輯,比如給ID=2這一行的c字段加1。
  3. redo log是循環(huán)寫的,空間固定會用完;binlog是可以追加寫入的。追加寫是指binlog文件寫到一定大小后會切換到下一個,并不會覆蓋以前的日志。
UndoLog

UndoLog 一般是邏輯日志,主要分為兩種:

  1. insert undo log

代表事務在insert新記錄時產(chǎn)生的undo log, 只在事務回滾時需要,并且在事務提交后可以被立即丟棄

  1. update undo log

事務在進行update或delete時產(chǎn)生的undo log; 不僅在事務回滾時需要,在快照讀時也需要;所以不能隨便刪除,只有在快速讀或事務回滾不涉及該日志時,對應的日志才會被purge線程統(tǒng)一清除

3、MySQL中的索引

索引的常見模型有哈希表、有序數(shù)組搜索樹

哈希表:一種以KV存儲數(shù)據(jù)的結(jié)構(gòu),只適合等值查詢,不適合范圍查詢。

有序數(shù)組:只適用于靜態(tài)存儲引擎,涉及到插入的時候比較麻煩??梢詤⒖糐ava中的ArrayList。

搜索樹:按照數(shù)據(jù)結(jié)構(gòu)中的二叉樹來存儲數(shù)據(jù),不過此時是N叉樹(B+樹)。廣泛應用在存儲引擎層中。

B+樹比B樹優(yōu)勢在于:

  1. B+ 樹非葉子節(jié)點存儲的只是索引,可以存儲的更多。B+樹比B樹更加矮胖,IO次數(shù)更少。
  2. B+ 樹葉子節(jié)點前后管理,更加方便范圍查詢。同時結(jié)果都在葉子節(jié)點,查詢效率穩(wěn)定。
  3. B+樹中更有利于對數(shù)據(jù)掃描,可以避免B樹的回溯掃描。

索引的優(yōu)點:

1、唯一索引可以保證每一行數(shù)據(jù)的唯一性?

2、提高查詢速度?

3、加速表與表的連接?

4、顯著的減少查詢中分組和排序的時間

5、通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。

索引的缺點:

1、創(chuàng)建跟維護都需要耗時?

2、創(chuàng)建索引時,需要對表加鎖,在鎖表的同時,可能會影響到其他的數(shù)據(jù)操作?

3、 索引需要磁盤的空間進行存儲,磁盤占用也很快。

4、當對表中的數(shù)據(jù)進行CRUD的時,也會觸發(fā)索引的維護,而維護索引需要時間,可能會降低數(shù)據(jù)操作性能

索引設(shè)計的原則不應該:

1、索引不是越多越好。索引太多,維護索引需要時間跟空間。

2、 頻繁更新的數(shù)據(jù),不宜建索引。

3、數(shù)據(jù)量小的表沒必要建立索引。

應該:

1、重復率小的列建議生成索引。因為重復數(shù)據(jù)少,索引樹查詢更有效率,等價基數(shù)越大越好。

2、數(shù)據(jù)具有唯一性,建議生成唯一性索引。在數(shù)據(jù)庫的層面,保證數(shù)據(jù)正確性?

3、頻繁group by、order by的列建議生成索引??梢源蠓岣叻纸M和排序效率?

4、經(jīng)常用于查詢條件的字段建議生成索引。通過索引查詢,速度更快

索引失效的場景

1、模糊搜索:左模糊或全模糊都會導致索引失效,比如'%a'和'%a%'。但是右模糊是可以利用索引的,比如'a%' 。

2、隱式類型轉(zhuǎn)換:比如select * from t where name = xxx , name是字符串類型,但是沒有加引號,所以是由MySQL隱式轉(zhuǎn)換的,所以會讓索引失效 3、當語句中帶有or的時候:比如select * from t where name=‘sw’ or age=14

4、不符合聯(lián)合索引的最左前綴匹配:(A,B,C)的聯(lián)合索引,你只where了C或B或只有B,C

關(guān)于索引的知識點

主鍵索引:主鍵索引的葉子節(jié)點存的是整行數(shù)據(jù)信息。在InnoDB里,主鍵索引也被稱為聚簇索引(clustered index)。主鍵自增是無法保證完全自增的哦,遇到唯一鍵沖突、事務回滾等都可能導致不連續(xù)。

唯一索引:以唯一列生成的索引,該列不允許有重復值,但允許有空值(NULL)

普通索引跟唯一索引查詢性能:InnoDB的數(shù)據(jù)是按數(shù)據(jù)頁為單位來讀寫的,默認每頁16KB,因此這兩種索引查詢數(shù)據(jù)性能差別微乎其微。

change buffer:普通索引用在更新過程的加速,更新的字段如果在緩存中,如果是普通索引則直接更新即可。如果是唯一索引需要將所有數(shù)據(jù)讀入內(nèi)存來確保不違背唯一性,所以盡量用普通索引。

非主鍵索引:非主鍵索引的葉子節(jié)點內(nèi)容是主鍵的值。在InnoDB里,非主鍵索引也被稱為二級索引(secondary index)

回表:先通過數(shù)據(jù)庫索引掃描出數(shù)據(jù)所在的行,再通過行主鍵id取出索引中未提供的數(shù)據(jù),即基于非主鍵索引的查詢需要多掃描一棵索引樹。

覆蓋索引:如果一個索引包含(或者說覆蓋)所有需要查詢的字段的值,我們就稱之為覆蓋索引。

聯(lián)合索引:相對單列索引,組合索引是用多個列組合構(gòu)建的索引,一次性最多聯(lián)合16個。

最左前綴原則:對多個字段同時建立的組合索引(有順序,ABC,ACB是完全不同的兩種聯(lián)合索引) 以聯(lián)合索引(a,b,c)為例,建立這樣的索引相當于建立了索引a、ab、abc三個索引。另外組合索引實際還是一個索引,并非真的創(chuàng)建了多個索引,只是產(chǎn)生的效果等價于產(chǎn)生多個索引。

索引下推:MySQL 5.6引入了索引下推優(yōu)化,可以在索引遍歷過程中,對索引中包含的字段先做判斷,過濾掉不符合條件的記錄,減少回表字數(shù)。

索引維護:B+樹為了維護索引有序性涉及到頁分裂跟頁合并。增刪數(shù)據(jù)時需考慮頁空間利用率。

自增主鍵:一般會建立與業(yè)務無關(guān)的自增主鍵,不會觸發(fā)葉子節(jié)點分裂。

延遲關(guān)聯(lián):通過使用覆蓋索引查詢返回需要的主鍵,再根據(jù)主鍵關(guān)聯(lián)原表獲得需要的數(shù)據(jù)。

InnoDB存儲: * .frm文件是一份定義文件,也就是定義數(shù)據(jù)庫表是一張怎么樣的表。*.ibd文件則是該表的索引,數(shù)據(jù)存儲文件,既該表的所有索引樹,所有行記錄數(shù)據(jù)都存儲在該文件中。

MyISAM存儲* .frm文件是一份定義文件,也就是定義數(shù)據(jù)庫表是一張怎么樣的表。* .MYD文件是MyISAM存儲引擎表的所有行數(shù)據(jù)的文件。* .MYI文件存放的是MyISAM存儲引擎表的索引相關(guān)數(shù)據(jù)的文件。MyISAM引擎下,表數(shù)據(jù)和表索引數(shù)據(jù)是分開存儲的。

MyISAM查詢:在MyISAM下,主鍵索引和輔助鍵索引都屬于非聚簇索引。查詢不管是走主鍵索引,還是非主鍵索引,在葉子結(jié)點得到的都是目的數(shù)據(jù)的地址,還需要通過該地址,才能在數(shù)據(jù)文件中找到目的數(shù)據(jù)。

PSInnoDB支持聚簇索引,MyISAM不支持聚簇索引

4、SQL事務隔離級別

ACID的四個特性

  1. 原子性(Atomicity):把多個操作放到一個事務中,保證這些操作要么都成功,要么都不成功
  2. 一致性(Consistency):理解成一串對數(shù)據(jù)進行操作的程序執(zhí)行下來,不會對數(shù)據(jù)產(chǎn)生不好的影響,比如憑空產(chǎn)生,或消失
  3. 隔離性(Isolation,又稱獨立性):隔離性的意思就是多個事務之間互相不干擾,即使是并發(fā)事務的情況下,他們只是兩個并發(fā)執(zhí)行沒有交集,互不影響的東西;當然實現(xiàn)中,也不一定需要這么完整隔離性,即不一定需要這么的互不干擾,有時候還是允許有部分干擾的。所以MySQL可以支持4種事務隔離性
  4. 持久性(Durability):當某個操作操作完畢了,那么結(jié)果就是這樣了,并且這個操作會持久化到日志記錄中

PS:ACID中C與CAP定理中C的區(qū)別

ACID的C著重強調(diào)單數(shù)據(jù)庫事務操作時,要保證數(shù)據(jù)的完整和正確性,數(shù)據(jù)不會憑空消失跟增加。CAP 理論中的C指的是對一個數(shù)據(jù)多個備份的讀寫一致性

事務操作可能會出現(xiàn)的數(shù)據(jù)問題

1、臟讀(dirty read):B事務更改數(shù)據(jù)還未提交,A事務已經(jīng)看到并且用了。B事務如果回滾,則A事務做錯了?

2、 不可重復讀(non-repeatable read):不可重復讀的重點是修改: 同樣的條件, 你讀取過的數(shù)據(jù), 再次讀取出來發(fā)現(xiàn)值不一樣了,只需要鎖住滿足條件的記錄?

3、 幻讀(phantom read):事務A先修改了某個表的所有紀錄的狀態(tài)字段為已處理,未提交;事務B也在此時新增了一條未處理的記錄,并提交了;事務A隨后查詢記錄,卻發(fā)現(xiàn)有一條記錄是未處理的造成幻讀現(xiàn)象,幻讀僅專指新插入的行?;米x會造成語義上的問題跟數(shù)據(jù)一致性問題。

4、 在可重復讀RR隔離級別下,普通查詢是快照讀,是不會看到別的事務插入的數(shù)據(jù)的。因此,幻讀在當前讀下才會出現(xiàn)。要用間隙鎖解決此問題。

在說隔離級別之前,你首先要知道,你隔離得越嚴實,效率就會越低。因此很多時候,我們都要在二者之間尋找一個平衡點。SQL標準的事務隔離級別由低到高如下:上圖從上到下的模式會導致系統(tǒng)的并行性能依次降低,安全性依次提高。

讀未提交:別人改數(shù)據(jù)的事務尚未提交,我在我的事務中也能讀到。

讀已提交(Oracle默認):別人改數(shù)據(jù)的事務已經(jīng)提交,我在我的事務中才能讀到。

可重復讀(MySQL默認):別人改數(shù)據(jù)的事務已經(jīng)提交,我在我的事務中也不去讀,以此保證重復讀一致性。

串行:我的事務尚未提交,別人就別想改數(shù)據(jù)。

標準跟實現(xiàn):上面都是關(guān)于事務的標準,但是每一種數(shù)據(jù)庫都有不同的實現(xiàn),比如MySQL InnDB 默認為RR級別,但是不會出現(xiàn)幻讀。因為當事務A更新了所有記錄的某個字段,此時事務A會獲得對這個表的表鎖,因為事務A還沒有提交,所以事務A獲得的鎖沒有釋放,此時事務B在該表插入新記錄,會因為無法獲得該表的鎖,則導致插入操作被阻塞。只有事務A提交了事務后,釋放了鎖,事務B才能進行接下去的操作。所以可以說 ? MySQL的RR級別的隔離是已經(jīng)實現(xiàn)解決了臟讀,不可重復讀和幻讀的。

5、MySQL中的鎖

無論是Java的并發(fā)編程還是數(shù)據(jù)庫的并發(fā)操作都會涉及到鎖,研發(fā)人員引入了悲觀鎖樂觀鎖這樣一種鎖的設(shè)計思想。

悲觀鎖

優(yōu)點:適合在寫多讀少的并發(fā)環(huán)境中使用,雖然無法維持非常高的性能,但是在樂觀鎖無法提更好的性能前提下,可以做到數(shù)據(jù)的安全性

缺點:加鎖會增加系統(tǒng)開銷,雖然能保證數(shù)據(jù)的安全,但數(shù)據(jù)處理吞吐量低,不適合在讀書寫少的場合下使用

樂觀鎖

優(yōu)點:在讀多寫少的并發(fā)場景下,可以避免數(shù)據(jù)庫加鎖的開銷,提高DAO層的響應性能,很多情況下ORM工具都有帶有樂觀鎖的實現(xiàn),所以這些方法不一定需要我們?nèi)藶榈娜崿F(xiàn)。

缺點:在寫多讀少的并發(fā)場景下,即在寫操作競爭激烈的情況下,會導致CAS多次重試,沖突頻率過高,導致開銷比悲觀鎖更高。

實現(xiàn):數(shù)據(jù)庫層面的樂觀鎖其實跟CAS思想類似, 通數(shù)據(jù)版本號或者時間戳也可以實現(xiàn)。

數(shù)據(jù)庫并發(fā)場景主要有三種:

讀-讀:不存在任何問題,也不需要并發(fā)控制

讀-寫:有隔離性問題,可能遇到臟讀,幻讀,不可重復讀

寫-寫:可能存更新丟失問題,比如第一類更新丟失,第二類更新丟失

兩類更新丟失問題:

第一類更新丟失:事務A的事務回滾覆蓋了事務B已提交的結(jié)果 第二類更新丟失:事務A的提交覆蓋了事務B已提交的結(jié)果

為了合理貫徹落實鎖的思想,MySQL中引入了雜七雜八的各種鎖:


鎖分類

MySQL支持三種層級的鎖定,分別為

  1. 表級鎖定

MySQL中鎖定粒度最大的一種鎖,最常使用的MYISAM與INNODB都支持表級鎖定。

  1. 頁級鎖定

是MySQL中鎖定粒度介于行級鎖和表級鎖中間的一種鎖,表級鎖速度快,但沖突多,行級沖突少,但速度慢。所以取了折衷的頁級,一次鎖定相鄰的一組記錄。

  1. 行級鎖定

Mysql中鎖定粒度最細的一種鎖,表示只針對當前操作的行進行加鎖。行級鎖能大大減少數(shù)據(jù)庫操作的沖突。其加鎖粒度最小,但加鎖的開銷也最大行級鎖不一定比表級鎖要好:鎖的粒度越細,代價越高,相比表級鎖在表的頭部直接加鎖,行級鎖還要掃描找到對應的行對其上鎖,這樣的代價其實是比較高的,所以表鎖和行鎖各有所長。

MyISAM中的鎖
  1. 雖然MySQL支持表,頁,行三級鎖定,但MyISAM存儲引擎只支持表鎖。所以MyISAM的加鎖相對比較開銷低,但數(shù)據(jù)操作的并發(fā)性能相對就不高。但如果寫操作都是尾插入,那還是可以支持一定程度的讀寫并發(fā)

  2. 從MyISAM所支持的鎖中也可以看出,MyISAM是一個支持讀讀并發(fā),但不支持通用讀寫并發(fā),寫寫并發(fā)的數(shù)據(jù)庫引擎,所以它更適合用于讀多寫少的應用場合,一般工程中也用的較少。

InnoDB中的鎖

該模式下支持的鎖實在是太多了,具體如下:

共享鎖和排他鎖 (Shared and Exclusive Locks)

意向鎖(Intention Locks)?

記錄鎖(Record Locks)?

間隙鎖(Gap Locks)?

臨鍵鎖 (Next-Key Locks)?

插入意向鎖(Insert Intention Locks)?

主鍵自增鎖 (AUTO-INC Locks)?

空間索引斷言鎖(Predicate Locks for Spatial Indexes)

舉個栗子,比如行鎖里的共享鎖跟排它鎖:lock in share modle 共享讀鎖:

為了確保自己查到的數(shù)據(jù)沒有被其他的事務正在修改,也就是說確保查到的數(shù)據(jù)是最新的數(shù)據(jù),并且不允許其他人來修改數(shù)據(jù)。但是自己不一定能夠修改數(shù)據(jù),因為有可能其他的事務也對這些數(shù)據(jù)使用了 in share mode 的方式上了S 鎖。如果不及時的commit 或者rollback 也可能會造成大量的事務等待

for update排它寫鎖:

為了讓自己查到的數(shù)據(jù)確保是最新數(shù)據(jù),并且查到后的數(shù)據(jù)只允許自己來修改的時候,需要用到for update。相當于一個 update 語句。在業(yè)務繁忙的情況下,如果事務沒有及時的commit或者rollback 可能會造成其他事務長時間的等待,從而影響數(shù)據(jù)庫的并發(fā)使用效率。

Gap Lock間隙鎖:

1、行鎖只能鎖住行,如果在記錄之間的間隙插入數(shù)據(jù)就無法解決了,因此MySQL引入了間隙鎖(Gap Lock)。間隙鎖是左右開區(qū)間。間隙鎖之間不會沖突。

2、間隙鎖和行鎖合稱NextKeyLock,每個NextKeyLock前開后閉區(qū)間。

間隙鎖加鎖原則(學完忘那種):

1、加鎖的基本單位是 NextKeyLock,是前開后閉區(qū)間。

2、查找過程中訪問到的對象才會加鎖。

3、索引上的等值查詢,給唯一索引加鎖的時候,NextKeyLock退化為行鎖。

4、索引上的等值查詢,向右遍歷時且最后一個值不滿足等值條件的時候,NextKeyLock退化為間隙鎖。

5、唯一索引上的范圍查詢會訪問到不滿足條件的第一個值為止。

6、MVCC

MVCC:

1、全稱Multi-Version Concurrency Control,即多版本并發(fā)控制。MVCC是一種并發(fā)控制的理念,維持一個數(shù)據(jù)的多個版本,使得讀寫操作沒有沖突。

2、MVCC在MySQL InnoDB中實現(xiàn)目的主要是為了提高數(shù)據(jù)庫并發(fā)性能,用更好的方式去處理讀-寫沖突,做到即使有讀寫沖突時,也能做到不加鎖,非阻塞并發(fā)讀。

MySQL InnoDB下的當前讀和快照讀

  1. 當前讀

1、像select lock in share mode(共享鎖)、select for update 、update、insert、delete(排他鎖)這些操作都是一種當前讀,就是它讀取的是記錄的最新版本,讀取時還要保證其他并發(fā)事務不能修改當前記錄,會對讀取的記錄進行加鎖。

2、當前讀可以認為是悲觀鎖的具體功能實現(xiàn)

  1. 快照讀

1、不加鎖的select就是快照讀,即不加鎖的非阻塞讀;快照讀的前提是隔離級別不是串行級別,串行級別下的快照讀會退化成當前讀;之所以出現(xiàn)快照讀的情況,是基于提高并發(fā)性能的考慮,快照讀的實現(xiàn)是基于多版本并發(fā)控制,即MVCC,可以認為MVCC是行鎖的一個變種,但它在很多情況下,避免了加鎖操作,降低了開銷;既然是基于多版本,即快照讀可能讀到的并不一定是數(shù)據(jù)的最新版本,而有可能是之前的歷史版本。

2、快照讀就是MVCC思想在MySQL的具體非阻塞讀功能實現(xiàn),MVCC的目的就是為了實現(xiàn)讀-寫沖突不加鎖,提高并發(fā)讀寫性能,而這個讀指的就是快照讀。

3、快照讀就是MySQL為我們實現(xiàn)MVCC理想模型的其中一個具體非阻塞讀功能。

因為大佬不滿意只讓數(shù)據(jù)庫采用悲觀鎖這樣性能不佳的形式去解決讀-寫沖突問題,而提出了MVCC,所以我們可以形成兩個組合:

MVCC + 悲觀鎖:MVCC解決讀寫沖突,悲觀鎖解決寫寫沖突

MVCC + 樂觀鎖:MVCC解決讀寫沖突,樂觀鎖解決寫寫沖突

MVCC的實現(xiàn)原理

MVCC實現(xiàn)原理主要是依賴記錄中的 四個隱式字段、undo日志 、Consistent Read View來實現(xiàn)的。

四個隱式字段

  1. DB_TRX_ID:

6byte,最近修改(修改/插入)事務ID:記錄創(chuàng)建這條記錄/最后一次修改該記錄的事務ID

  1. DB_ROLL_PTR

7byte,回滾指針,指向這條記錄的上一個版本(存儲于rollback segment里)

  1. DB_ROW_ID

6byte,隱含的自增ID(隱藏主鍵),如果數(shù)據(jù)表沒有主鍵,InnoDB會自動以DB_ROW_ID產(chǎn)生一個聚簇索引

  1. FLAG

一個刪除flag隱藏字段, 既記錄被更新或刪除并不代表真的刪除,而是刪除flag變了

事務對一條記錄的修改,會導致該記錄的undo log成為一條記錄版本線性表(鏈表),undo log的鏈首就是最新的舊記錄,鏈尾就是最早的舊記錄。

undo日志:此知識點上文已經(jīng)說過了,對MVCC有幫助的實質(zhì)是update undo log,undo log實際上就是存在rollback segment中舊記錄鏈。

一致讀視圖 Consistent Read View:Read View是事務進行快照讀操作的時候生產(chǎn)的讀視圖(Read View),在該事務執(zhí)行的快照讀的那一刻,會生成數(shù)據(jù)庫系統(tǒng)當前的一個快照,記錄并維護系統(tǒng)當前活躍事務的ID(InnoDB里面每個事務有一個唯一的事務ID,叫作transaction id。它是在事務開始的時候向InnoDB的事務系統(tǒng)申請的,是按申請順序嚴格遞增的)。拿著這個ID跟記錄中ID對比進行選擇性展示,這里說下大致的思維。

你可以簡單的理解為MVCC為每一行增加了兩個隱藏字段,兩個字段分別保存了這個行的當前事務ID跟行的刪除事務ID

  1. insert時:

InnoDB為新插入的每一行保存當前系統(tǒng)版本號作為版本號。

  1. select時:

1、 InnoDB只會查找版本早于當前事務版本的數(shù)據(jù)行(也就是行的系統(tǒng)版本號<=事務的系統(tǒng)版本號),這樣可以確保事務讀取的行,要么是在事務開始前已經(jīng)存在的,要么是事務自身插入或者修改過的。

2、行的刪除版本要么未定義,要么大于當前事務版本號,這可以確保事務讀取到的行在事務開始之前未被刪除。

3、只有1,2 同時滿足的記錄,才能返回作為查詢結(jié)果。

  1. delete時:

InnoDB會為刪除的每一行保存當前系統(tǒng)的版本號(事務的ID)作為刪除標識.

  1. update時:

InnoDB執(zhí)行update,實際上是新插入了一行記錄,并保存其創(chuàng)建時間為當前事務的ID,同時保存當前事務ID到要update的行的刪除時間。

上面只是一個淺顯的講解MVCC選擇標準流程,源碼層面應該是根據(jù)低水位高水位來截取的。具體實現(xiàn)可自行百度。

重點

1、事務中快照讀的結(jié)果是非常依賴該事務首次出現(xiàn)快照讀的地方,即某個事務中首次出現(xiàn)快照讀的地方非常關(guān)鍵,它有決定該事務后續(xù)快照讀結(jié)果的能力。

2、在RC隔離級別下,是每個快照讀都會生成并獲取最新的Read View;而在RR隔離級別下,則是同一個事務中的第一個快照讀才會創(chuàng)建Read View, 之后的快照讀獲取的都是同一個Read View。

7、緩沖池(buffer pool)


應用系統(tǒng)分層架構(gòu),為了加速數(shù)據(jù)訪問,會把最常訪問的數(shù)據(jù),放在緩存(cache)里,避免每次都去訪問數(shù)據(jù)庫。操作系統(tǒng),會有緩沖池(buffer pool)機制,避免每次訪問磁盤,以加速數(shù)據(jù)的訪問。MySQL作為一個存儲系統(tǒng),同樣具有緩沖池(buffer pool)機制,以避免每次查詢數(shù)據(jù)都進行磁盤IO,主要作用:

1、存在的意義是加速查詢?

2、緩沖池(buffer pool) 是一種常見的降低磁盤訪問 的機制;

3、緩沖池通常以頁(page 16K)為單位緩存數(shù)據(jù);

4、緩沖池的常見管理算法是LRU,memcache,OS,InnoDB都使用了這種算法;

5、InnoDB對普通LRU進行了優(yōu)化:將緩沖池分為老生代新生代,入緩沖池的頁,優(yōu)先進入老生代,該頁被訪問,才進入新生代,以解決預讀失效的問題頁被訪問。且在老生代停留時間超過配置閾值的,才進入新生代,以解決批量數(shù)據(jù)訪問,大量熱數(shù)據(jù)淘汰的問題

預讀失效

由于預讀(Read-Ahead),提前把頁放入了緩沖池,但最終MySQL并沒有從頁中讀取數(shù)據(jù),稱為預讀失效

緩沖池污染

當某一個SQL語句,要批量掃描大量數(shù)據(jù)時,可能導致把緩沖池的所有頁都替換出去,導致大量熱數(shù)據(jù)被換出,MySQL性能急劇下降,這種情況叫緩沖池污染。解決辦法:加入老生代停留時間窗口策略后,短時間內(nèi)被大量加載的頁,并不會立刻插入新生代頭部,而是優(yōu)先淘汰那些,短期內(nèi)僅僅訪問了一次的頁。

8、table瘦身

空洞

MySQL執(zhí)行delete命令其實只是把記錄的位置,或者數(shù)據(jù)頁標記為了可復用,但磁盤文件的大小是不會變的。通過delete命令是不能回收表空間的。這些可以復用,而沒有被使用的空間,看起來就像是空洞。插入時候引發(fā)分裂同樣會產(chǎn)生空洞。

重建表思路

1、新建一個跟A表結(jié)構(gòu)相同的表B?

2、按照主鍵ID將A數(shù)據(jù)一行行讀取同步到表B?

3、用表B替換表A實現(xiàn)效果上的瘦身。

重建表指令

1、alter table A engine=InnoDB,慎重用,牛逼的DBA都用下面的開源工具。

2、推薦Github:gh-ost

9、SQL Joins、統(tǒng)計、 隨機查詢

7種join具體如下:統(tǒng)計

1、MyISAM模式下把一個表的總行數(shù)存在了磁盤上,直接拿來用即可?

2、InnoDB引擎由于 MVCC的原因,需要把數(shù)據(jù)讀出來然后累計求和?

3、性能來說 由好到壞:count(字段) < count(主鍵id) < count(1) ≈ count(*),盡量用count(*)。

隨機查詢

mysql>?select?word?from?words?order?by?rand()?limit?3;

直接使用order by rand(),explain 這個語句發(fā)現(xiàn)需要 Using temporaryUsing filesort,查詢的執(zhí)行代價往往是比較大的。所以在設(shè)計的時要避開這種寫法。

mysql>?select?count(*)?into?@C?from?t;
set?@Y1?=?floor(@C?*?rand());
set?@Y2?=?floor(@C?*?rand());
set?@Y3?=?floor(@C?*?rand());
select?*?from?t?limit?@Y1,1;?
select?*?from?t?limit?@Y2,1;
select?*?from?t?limit?@Y3,1;

這樣可以避免臨時表跟排序的產(chǎn)生,最終查詢行數(shù) = C + (Y1+1) + (Y2+1) + (Y3+1)

exist 和 in 對比

1、in查詢時首先查詢子查詢的表,然后將內(nèi)表和外表做一個笛卡爾積,然后按照條件進行篩選。

2、子查詢使用 exists,會先進行主查詢,將查詢到的每行數(shù)據(jù)循環(huán)帶入子查詢校驗是否存在,過濾出整體的返回數(shù)據(jù)。

3、兩表大小相當,in 和 exists 差別不大。內(nèi)表大,用 exists 效率較高;內(nèi)表小,用 in 效率較高。

4、查詢用not in 那么內(nèi)外表都進行全表掃描,沒有用到索引;而not extsts 的子查詢依然能用到表上的索引。not exists都比not in要快。

10、MySQL優(yōu)化

SQL優(yōu)化主要分4個方向:SQL語句跟索引、表結(jié)構(gòu)系統(tǒng)配置、硬件。

總優(yōu)化思路就是最大化利用索引盡可能避免全表掃描、減少無效數(shù)據(jù)的查詢

1、減少數(shù)據(jù)訪問:設(shè)置合理的字段類型,啟用壓縮,通過索引訪問等減少磁盤 IO。

2、返回更少的數(shù)據(jù):只返回需要的字段和數(shù)據(jù)分頁處理,減少磁盤 IO 及網(wǎng)絡 IO。

3、減少交互次數(shù):批量 DML 操作,函數(shù)存儲等減少數(shù)據(jù)連接次數(shù)。

4、減少服務器 CPU 開銷:盡量減少數(shù)據(jù)庫排序操作以及全表查詢,減少 CPU 內(nèi)存占用?

5、分表分區(qū):使用表分區(qū),可以增加并行操作,更大限度利用 CPU 資源。

SQL語句優(yōu)化大致舉例

1、合理建立覆蓋索引:可以有效減少回表。

2、union,or,in都能命中索引,建議使用in?

3、負向條件(!=、<>、not in、not exists、not like 等) 索引不會使用索引,建議用in。

4、在列上進行運算或使用函數(shù)會使索引失效,從而進行全表掃描?

5、小心隱式類型轉(zhuǎn)換,原字符串用整型會觸發(fā)CAST函數(shù)導致索引失效。原int用字符串則會走索引。

6、不建議使用%前綴模糊查詢。

7、多表關(guān)聯(lián)查詢時,小表在前,大表在后。在 MySQL 中,執(zhí)行 from 后的表關(guān)聯(lián)查詢是從左往右執(zhí)行的(Oracle 相反),第一張表會涉及到全表掃描。

8、調(diào)整 Where 字句中的連接順序,MySQL 采用從左往右,自上而下的順序解析 where 子句。根據(jù)這個原理,應將過濾數(shù)據(jù)多的條件往前放,最快速度縮小結(jié)果集。

SQL調(diào)優(yōu)大致思路

1、先用慢查詢?nèi)罩径ㄎ痪唧w需要優(yōu)化的sql?

2、使用 explain 執(zhí)行計劃查看索引使用情況?

3、重點關(guān)注(一般情況下根據(jù)這4列就能找到索引問題):

1、key(查看有沒有使用索引)?

2、key_len(查看索引使用是否充分)

3、type(查看索引類型)?

4、Extra(查看附加信息:排序、臨時表、where條件為false等)

4、根據(jù)上1步找出的索引問題優(yōu)化sql 5、再回到第2步

表結(jié)構(gòu)優(yōu)化

1、盡量使用TINYINT、SMALLINT、MEDIUM_INT作為整數(shù)類型而非INT,如果非負則加上UNSIGNED 。

2、VARCHAR的長度只分配真正需要的空間?。

3、盡量使用TIMESTAMP而非DATETIME?。

4、單表不要有太多字段,建議在20以內(nèi)。

5、避免使用NULL字段,很難查詢優(yōu)化且占用額外索引空間。字符串默認為''。

讀寫分離

只在主服務器上寫,只在從服務器上讀。對應到數(shù)據(jù)庫集群一般都是一主一從、一主多從。業(yè)務服務器把需要寫的操作都寫到主數(shù)據(jù)庫中,讀的操作都去從庫查詢。主庫會同步數(shù)據(jù)到從庫保證數(shù)據(jù)的一致性。一般 讀寫分離 的實現(xiàn)方式有兩種:代碼封裝數(shù)據(jù)庫中間件。

分庫分表分庫分表分為垂直和水平兩個方式,一般是先垂直后水平。

1、垂直分庫:將應用分為若干模塊,比如訂單模塊、用戶模塊、商品模塊、支付模塊等等。其實就是微服務的理念。

2、垂直分表:一般將不常用字段跟數(shù)據(jù)較大的字段做拆分。

3、水平分表:根據(jù)場景選擇什么字段作分表字段,比如淘寶日訂單1000萬,用userId作分表字段,數(shù)據(jù)查詢支持到最近6個月的訂單,超過6個月的做歸檔處理,那么6個月的數(shù)據(jù)量就是18億,分1024張表,每個表存200W數(shù)據(jù),hash(userId)%100找到對應表格。

4、ID生成器分布式ID 需要跨庫全局唯一方便查詢存儲-檢索數(shù)據(jù),確保唯一性跟數(shù)字遞增性。

目前主要流行的分庫分表工具 就是Mycatsharding-sphere

TiDB:開源分布式數(shù)據(jù)庫,結(jié)合了傳統(tǒng)的 RDBMS 和NoSQL 的最佳特性。TiDB 兼容 MySQL,支持無限的水平擴展,具備強一致性和高可用性。TiDB 的目標是為 OLTP(Online Transactional Processing) 和 OLAP (Online Analytical Processing) 場景提供一站式的解決方案。TiDB 具備如下核心特點

1、支持 MySQL 協(xié)議(開發(fā)接入成本低)。

2、100% 支持事務(數(shù)據(jù)一致性實現(xiàn)簡單、可靠)。

3、無限水平拓展(不必考慮分庫分表),不停服務。

4、TiDB 支持和 MySQL 的互備。

5、遵循jdbc原則,學習成本低,強關(guān)系型,強一致性,不用擔心主從配置,不用考慮分庫分表,還可以無縫動態(tài)擴展。

適合:

1、原業(yè)務的 MySQL 的業(yè)務遇到單機容量或者性能瓶頸時,可以考慮使用 TiDB 無縫替換 MySQL。

2、大數(shù)據(jù)量下,MySQL 復雜查詢很慢。

3、大數(shù)據(jù)量下,數(shù)據(jù)增長很快,接近單機處理的極限,不想分庫分表或者使用數(shù)據(jù)庫中間件等對業(yè)務侵入性較大、對業(yè)務有約束的 Sharding 方案。

4、大數(shù)據(jù)量下,有高并發(fā)實時寫入、實時查詢、實時統(tǒng)計分析的需求。5、有分布式事務、多數(shù)據(jù)中心的數(shù)據(jù) 100% 強一致性、auto-failover 的高可用的需求。

不適合:

1、單機 MySQL 能滿足的場景也用不到 TiDB。

2、數(shù)據(jù)條數(shù)少于 5000w 的場景下通常用不到 TiDB,TiDB 是為大規(guī)模的數(shù)據(jù)場景設(shè)計的。

3、如果你的應用數(shù)據(jù)量小(所有數(shù)據(jù)千萬級別行以下),且沒有高可用、強一致性或者多數(shù)據(jù)中心復制等要求,那么就不適合使用 TiDB。


原創(chuàng)電子書

原創(chuàng)思維導圖


已經(jīng)有8756個初學者都下載了!

?三歪把【大廠面試知識點】、【簡歷模板】、【原創(chuàng)文章

全部整理成電子書,共有1263頁!掃碼或微信搜 Java3y

回復「888」領(lǐng)取


47塊半年購買服務器。最近如果要買服務器的同學可以重點關(guān)注,錯過了就要等一年!別在活動結(jié)束后再問我能不能買了喲!

47塊就能賣到服務器?搶瘋了!

瀏覽 68
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 免费一级A片在线观看视频| 亚洲群交| 3d动漫精品一区二区三区在线观看 | 国产爱搞| 91麻豆精品国产91久久久吃药| 加勒比无码视频| 久久草草热国产精| 黄网站免费观看| 麻豆91精品91久久久停运原因| 日日干夜夜操| 亚洲AV无码久久精品色无码蜜桃 | 成人色视| 国产精品秘久久久久久久久 | 青草青视频| aa在线| 婷婷色色五月天| 无码人妻中文字幕| 精品AV无码| 人妻体体内射精一区二区| 天天干夜夜爽| 亚洲A视频| 亚洲国产成人一区二区| 黄色日逼视频| 黄色视频在线观看免费网站| 99国产免费视频| 黄频在线免费观看| 亚洲无码AV麻豆| 天天操网| 蜜桃AV一区二区三区| 成人伊人AV| 嫩草亚洲小泬久久夂| 中文字幕在线观看不卡| 西西444WWW无码大胆知乎| 天天撸天天色| 性爱免费视频| 99在线免费观看| 天堂操逼| 国产SM视频| 久久精品电影| 韩国高清无码视频| 国产美女全裸网站| 四川少妇bbbbbbbbb| 成人三级片网| 16一17女人毛片| 色综合天天| 成人你懂的| 亚州加勒比无码| 免费黄色成人网站| 亚洲中文无码字幕| 91久久国产综合久| 51妺嘿嘿午夜福利在线| 亚洲成人无码视频在线观看| 亚州精品无码| 色综合久久天天综合网| 亚洲天堂精品视频| 欧美日韩一级二级三级| 败火老熟女ThePorn视频| 人人操超碰| 操逼视频在线免费观看| 亚洲成人日韩| 日韩一区二区高清无码| 日韩免费在线视频| 99久久久| 亚洲福利视频在线| 无码福利电影| 91欧美在线| 四川BBB嫩BBBB爽BBBB| 国产AVwww| 五月天婷婷在线观看| 国产黄色无码| 男人的天堂手机在线| 国产精品毛片视频| 欧美久久一区| 怡红院在线观看| 亚洲高清福利| 精品國產一區二區三區久久蜜月| 亚洲www| 婷婷五月天啪啪| 亚洲日韩一区二区三区四区| 亚洲福利一区二区| 免费看欧美成人A片| 2019中文字幕在线免费观看| 欧美午夜福利| 亚洲秘无码一区二区三区观看| 97色在线| 91妻人人澡人人爽人人精品| 亚洲欧洲免费看| 青青三级片| 日本无码一区二区三区| 欧美a级视频| 亚洲AV无一区二区三区久久| 日韩成人精品在线| 黑人猛躁白人BBBBBBBBB| 无码人妻熟妇| 激情AAA| 成人AV免费在线观看| 91麻豆精品视频| 日韩免费精品视频| 蜜桃亚洲AV无码一区二区三区| 丝袜久久| yjizz视频网| 美女操b| 久久国产乱子伦精品免费女,网站| 精品国产区| 一级片欧美| 伊人成人小说| 亚洲精品成人7777777| 日韩AV在线免费| 奇米一区| 五月婷婷网站| 亚洲Aⅴ| 欧美精品无码一区二区| 久久久久久久三级片| 超碰在线人人干| 亚洲国产成人va| 亚洲国产精品欧美久久| 黑人AV在线播放| 男人天堂无码av| 亚洲第一av| 国内精品卡一卡二卡三| 黄色网址在线免费观看| 五月天婷婷综合| 色婷婷激情| 亚洲无码视频在线看| 一级无码高清| 青春草在线观看视频| 日韩精品成人av| 学生妹一级| 一本色道久久综合狠狠| A视频免费在线观看| 色综合五月婷婷| 国产女人18毛片水18精品软件| 天天操大香蕉| WWW亚洲视频| 大香蕉福利导航| 操操日| 在线看黄色片| 国产无码激情视频| 黄色电影免费在线观看| 欧美一区| 麻豆MD传媒MD0071| 在线草| 无码人妻一区二区三区线花季传件| jizz在线观看| 97一区二区三区| 日本中文字幕在线视频| 国产传媒在线观看| 超碰精品| 乱伦五月天| 色五月中文字幕| 天堂AV在线免费观看| 91av无码| 亚洲小说区图片区| 西西444www| 女人的天堂AV| AV毛片| 国产无遮挡| 国产香蕉视频在线观看| 九九热国产视频| 国产精品av在线| 黄色91| 18禁91| 亚洲三级网站| 一品国精和二品国精的文化意义 | 国产精品成人99一区无码| 亚洲精品熟女| 日日操操| 爱搞搞就要搞| 开心激情网站| 激情啪啪网站| 天天操人人射| 亚洲中文字幕在线视频播放| 蜜桃AV无码一区二区三区| 欧美激情无码一区二区三区张丽 | 一本色道无码道| 欧美性BBB槡BBB槡BBB| 丁香五月六月| 日韩高清一区二区| 东京热综合| 日韩视频免费观看高清完整版在线观 | 日韩h视频| caopro| 欧美日韩国产一区二区| 日本免费爱爱视频| AV天堂国产| www.无码视频| 狠狠干2025| av无码免费观看| 中文字幕不卡在线| www操逼| 国产福利在线| 国产精品久久久久的角色| 欧美草比视频| 中文字幕av久久爽爽| 伊人色播| 国产精品国产精品国产专区| 天天操网| 精品无码一| 亚洲a在线视频| 免费一级网站| 欧美V∧| 在线无码电影| 国产亚洲精品久久久久动| 在线不卡| а√天堂中文最新版8| 日韩三级视频在线观看| japanese在线观看| 黄色片一区二区| 欧美午夜福利在线观看| 日韩无码不卡| 松岛枫在线视频| 欧美成人性爱影院| 午夜综合网| 三级无码中文| jizz99| 国产小视频在线| 蜜桃精品久久久| 内射网站在线观看| 黄色一级片免费观看| 免费无人区一码二码乱码怎么办| 午夜福利视频网站| 91免费在线看| 亚洲无码不卡| 伊人网站视频在线| 精品国产乱码| 91av久久| 午夜黄色福利| 免费视频一区二区| 亚洲综合免费观看高清完整版在线观 | 日本高清视频网站网wwwwww| 成人久久大香蕉| 免费黄色福利视频| 狼友视频在线免费观看| 8050网午夜| 国产在线观看97| 香蕉视频日韩| 黄色大片免费在线观看| 深夜无码| 最新AV在线播放| 日本免费在线黄色视频| 日韩高清无码片| 色欲插插| 欧美熟妇精品一二三区| 亚洲欧美日韩在线| 久久一区二区三区四区五区 | 欧美成人精品激情在线视频| 91视频人妻| 欧美一区三区视频z| 亚洲成人大片| 伊人春色av| 77777免费观看电视剧推荐爱的教育| 无码av观看| 日批网站在线| 老湿机福利视频| 好叼操| 国产精品无码一区二区三| 国产av播放| 国产乱妇乱子伦视频免费观看让女人 | 丁香五月天婷婷| 北条麻妃无码视频在线| 仓井空一区二区| 亚洲精品97久久中文字幕| 法国《少女日记》电影| 悠悠色导航| www.久久久| 亚洲色情在线| 手机免费Av| 在线www| 亚洲精品一级二级三级| 亚洲在线免费| 免费无码国产在线怀| 操逼中文字幕| 久久久国产精品黄毛片| 大香蕉88| 翔田千里| 国产人妻| 国产黄色a片| 河南乱子伦视频国产| 淫揉BBB揉揉揉BBBBB| 久久丁香五月天| 91久久久久久久18| 精品码一区二在线观看| 开心四房播播第四婷婷| 在线国产激情视频| 自拍乱伦| 亚洲无码高清在线| V片免费看| 人妻黄色视频| 国产精品秘久久久久久久久 | 97人妻精品一区二区三区免 | 国产久久精品| 97国产| 一级A毛片| 欧美VA| 色婷婷丁香五月| 亚洲加勒比久久88色综合| 日逼视频免费| 亚洲激情小说| 欧美激情一区二区A片成人牛牛| 粉嫩小泬BBBB免费看-百度| 99激情| 天堂成人网站| 成人AV十八亚洲二区| 男女啪啪免费| 夜夜天天人人| AV小说在线观看| 大色欧美| www.jiujiujiu| 五月婷婷无码| 丁香五月天婷婷| 香蕉视频成人在线观看| 久久久久无码| 另类老妇奶性生BBwBB| 一级a一级a爰片免费免免中国A片| 北条麻妃在线不卡| 日韩第一区| 免费av播放| 亚欧洲精品在线视频免费观看| 国产96在线亚洲| 天天日天天色天天干| 国内老熟妇对白HDXXXX| 成人做爰100片免费-百度| 丰滿人妻-区二区三区| 亚洲中午字幕| 国产精品aaa| 无码精品一区二区在线| 韩国无码精品| 十八无码成人免费网站| 7777AV| av福利电影在线| 欧美成人国产| HEZ-502搭讪绝品人妻系列 | 欧美午夜伦理| 亚洲va在线va天堂va偷拍| 亚洲无码一级视频| 中文字幕高清在线| WWW.豆花视频精品| AV无码免费| 97欧美精品人妻系列| WWWA级片| www.天天射| 国产美女一级特黄大片| 日韩性爱在线观看| 欧美在线天堂| 91成人A片| 黄色大片中国一级片-免费看特一级片-亚洲黄色AV | 淫荡少妇美红久久久久久久久久| 97在线资源| 欧美成人免费电影| 日韩AV在线免费| 日韩不卡| 我爱大香蕉| 久草福利在线观看| xxx一区二区| 欧美成人大香蕉| 九九惹伊人| 九九九中文字幕| 国产小视频免费在线观看| 蜜桃毛片| 麻豆成人片| 国产乱伦中文字幕| 天天操天天操| 黄色片视频免费| 久久精品免费| 91无码人妻一区二区成人aⅴ| 人妻在线观看| 五月丁香婷婷啪啪| 影音先锋自拍| 欧美日韩国产成人电影| 97干干| 永久免费AV无码| 国产色av| 欧美AA级毛片| 欧美日韩免费在线观看| 91嫖妓站街埯店老熟女| 超碰在线人人操| 中文字幕无码免费| 亚洲色色频| 成人AV在线资源| 国产免费一级片| 高清无码免费在线观看| 久久青草免费视频| 超碰2021| 国产综合在线播放| 国产AV日韩AⅤ亚洲AV中文| 久久久久久久无码| 国产热视频| 3p绿帽黑人看自己老婆| 大香蕉在线99| 欧美熟妇精品黑人巨大一二三区| 国产一级乱伦| 好色综合| 免费人成在线观看视频播放 | 成人大香蕉网站精品免费| 欧美成人社区| 亚洲精品无码视频在线观看| 人人爱人人操人人爽| 亚洲三级久久| 欧美试看| 天天操中文字幕| 亚洲另类图片小说| 国产无码专区| www.丁香五月| 土牛AV| 亚洲小说欧美激情另类A片小说 | 加勒比一区二区三区| 国产无码电影| 亚洲欧美日韩另类| 无码一区二区北条| www四虎| 广西少妇BBwBBwBBw| 午夜福利剧场| 国精产品一二三区| 欧美精品在线观看| 翔田千里在线观看| 91免费观看视频| 91麻花| 五月天激情爱爱| 99热精品2| 色老汉视频| 蜜桃视频日韩| 91在线观看| 亚洲成人影片在线观看| 爱视频福利网| 国产精品黄色视频| 99久久久精品久久久久久| 中文字幕第五页| 在线观看视频国产| 欧美日韩性爰视频| 成人婷婷| 国产黄色一级电影| 日韩乱伦小说| 亚洲aⅴ| 久久日韩操| 中文字幕在线日亚洲9| 久久久久中文字幕| 大香蕉手机视频| 操操片| 99re6热在线精品视频功能| 99国产精品99久久久久久粉嫩| 久久久久久久极品内射| 天天干天天操天天干| 狠狠操2019| 小佟丽娅大战91哥| 日韩午夜AV| 欧美深夜福利视频| 青青操在线观看| 午夜黄色小视频| 国产精品资源在线观看| 国产乱码一区二区三区四区在线 | 国产精品欧美综合在线| AV网站免费观看| 在线观看一区| 三级片网站在线播放| 日韩V欧美| 深爱五月婷婷| 艹逼在线观看| 大鸡吧操逼| 91无码电影| 97精品欧美91久久久久久久| 无码人妻丰满熟妇精品区| 97人妻一区二区三区| 一级a一级a免费观看免免黄‘/ | 亚洲天堂视频网| 亚洲无码在线播放| 97精品人妻一区二区三区香蕉| 国产精品色情A级片| 国产精品一区在线| 国产精品毛片一区二区在线看| 久操视频一区二区三区| 成人无码人妻| 草草影院第一页YYCCC| 欧美三级在线播放| 人人射视频| 人人操人人爱人人妻| 一区无码| 精品资源成人| 在线免费观看成人视频| www久久| 91蝌蚪视频在线观看| 少妇一级婬片内射视频| 亚洲AV第二区国产精品| 欧美亚洲动漫| 成人伊人综合网| 人人草人人看人人摸| www.久久久久| 国产精品久久久久久99| 影音先锋无码AV| ww亚洲ww| 黄色国产视频| 51精品国产| 国产AⅤ无码一区二区| 精品久久久久久AV2025| 狠狠干大香蕉| 婷婷操逼网| 91操视频| 日韩毛片视频| 蜜桃视频在线入口www| 成人黃色A片免费看| 久久精品大屁股| 日韩一级在线播放| 中文无码在线观看中文字幕av中文| 337P大胆粉嫩噜噜噜| 青青草原网| 毛片毛片毛片毛片毛片| 亚洲一区亚洲二区| 强奸校花到高潮| 3D动漫啪啪精品一区二区中文字幕| 国产迷奸在线| 蜜乳AV一区二区三区| 欧美福利导航| 人妻熟女一区二区| 欧美激情四射| 免费无码一区二区三区四区五区 | 国产P片内射天涯海角| 国产黄片网站| 国产成人精品无码| 91人人妻人人做人人爽| 欧美日韩在线播放| 四川乱子伦95视频国产| 韩国精品无码一区二区三区18 | 日韩无码一级片| 天天操天天操天天操天天操| 777色色色| 中文字幕成人网站| 91成人片| 久久久久亚洲AV成人网人人软件 | 成人啪啪网站| 国产三级无码视频| 我要操视频| 亚洲成人无码视频| 在线播放JUY-925被丈夫上司侵犯的第7天 | 香蕉久久久| 天天日天天添| 国产精品一色哟哟哟| AA片免费| 午夜毛片| 操逼影视| 男女视频91| 亚洲无码乱码精品| V天堂在线视频| 黄色福利视频| 在线色片| 成年人黄色视频在线观看| 人妻毛片| 无码成人毛片| jizz亚洲| 中文字幕在线不卡| 一区二区三区久久久久〖网:.〗| 丁香一区二区| 成人a片在线免费观看| 亚洲AV无码专区一级婬片毛片 | 欧美中文字幕在线播放| 国产91免费| 成人国产AV网站| 天天看天天爽| 久久久高清无码视频| 亚洲成人黄色视频| 亚洲精品国产精品乱玛不99| 69视频在线观看| 日本久久网| 欧美成人毛片AAAAAA| 人人爱人人爽| 天天色天| 国产精品色情A级毛片| 亚洲AV自拍| 免费在线观看黄色视频网站| 在线免费观看黄色片| 亚洲视频欧美| 日韩群交视频| 国产成人综合亚洲| 亚洲一区中文字幕成人在线| 亚洲激情网站| 正在播放JUQ-878木下凛凛子 | 黄色色情小说| 大香蕉毛片| 丁香六月天| 先锋影音中文字幕| 特色毛片| 台湾中文字幕网| 欧美性爱动态| 91精产国品一二| 久久精品人妻| 一级a片在线观看| 暖暖在线视频| 一级a免一级a做免费线看内祥| 大鸡吧操视频| 久久yy| 成人一二区| 久久久久9999| 国产成人99久久亚洲综合精品| 亚洲欧洲精品在线| 亚洲乱伦电影| 黄色视频毛片一一| 97人妻人人| 茄子av| 欧美性爱香蕉视频| 日韩国产在线观看| 国产亚洲欧美在线| 欧美日韩免费| 小草久久95| 日本一级片在线播放| 亚洲色情网站| 久久精品电影| 在线观看AV无码| 亚洲激情综合视频| 免费观看毛片| 一本道高清无码视频| 日韩无码黄片| www男人天堂| 午夜激情免费| 在线观看视频你懂的| 日韩成人免费在线| 日韩一区二区在线看在线看| 嫩BBB槡BBBB槡BBB小号| 久久嫩草精品久久久久精| 欧美福利导航| 日韩黄色三级片| av水果派| 影音先锋成人资源网| 一级黄色网| 日韩无码内射| 无码入口| 人人干视频| 日韩欧美大片在线观看| 久久国产2025| 天天操大香蕉| 欧美黄色a片| 亚洲无码aa| av福利电影在线| 欧美三级在线播放| 亚洲日韩AV在线| 成人在线一区二区| 久久国产精品网站| 国产成人无码永久免费| 无码精品电影| 黄色小视频在线免费看| 丁香激情五月少妇| 黄色电影大香蕉| 日韩免费成人视频| 操逼短视频| 日韩在线国产| 亚洲AV无码成人精品区www| 国产黄色视频在线播放| 操碰人人操| 天天摸天天添| 国产av一二三区| 狠狠爱av| 98在线++传媒麻豆的视频| 人人干人人干人人干| 亚洲色图一区二区三区| AAA黄片| 婷婷色色五月天图片| 国产高清秘成人久久| 噜噜噜网| 青青草视频免费| 人人看人人爽| 免费成人黄色网址| 色五月婷婷综合| 久久黑人| AV免费在线播放| 人妻成人网| 久久久久久性爱| 欧美性小说| 午夜精东影业传媒在线观看| 天天操天天操天天操天天操| 亚洲精品69| 国产AV中文| 欧美日本中文字幕| 中文字幕手机在线视频| 中文字幕35页| 中文字幕在线观看日本| 刘玥一区二区三区| 五月婷婷婷婷| 亚洲日产专区| 久草手机视频在线观看| 成人在线免费电影| 亚洲无码www| 天堂网中文| 日韩中文字幕网站| 五月天婷婷丁香综合视频| 无码人妻在线| 伊人77| 色老板最新网址| 人妻无码久久| 激情国产av| 久久黄色网址| 天天添天天操| 无码123| 无码人妻一区二区三区| 插吧插吧网| 成人网站在线免费| 国产区在线观看| 大香蕉75| 免费看日韩毛片| 人人操碰人人| 日韩一区二区AV| jizz免费视频| 91一区二区在线播放精品| 91久久精品一区二区三区| 夜夜操狠狠操| 97欧美日韩| 最近最火中文字幕mv歌词| A视频免费| 伊人成年网| 黄片视频免费看| 国产小福利| 大鸡巴操骚逼视频| 嫩草av| 欧美成人综合一区| 国产操比视频| 在线观看国产欧美| 國產美女AV操逼網站| 色色色色色欧美| 亚洲AV无码国产精品二区| 国产操P| 无码欧美人XXXXX日本无码| 精品久久免费一区二区三区| 欧洲性爱视频在线观看| 国产香蕉91| 午夜激情免费| 欧美肉大捧一进一出小说| 国产精品色8| 91国产爽黄在线| 91视频播放| 黄色视频免费在线观看| 国产亚洲欧美一区二区| 欧美人人插| 日韩v亚洲| 骚逼自拍| 国产精品每日更新| 一级黄色小视频| 九九亚洲| 国产在线观看一区二区| 日韩成人无码AV| A片网| 新超碰在线观看| 欧美操逼大全| 亚洲不卡一区二区三区| 色婷婷激情综合网| 天堂8在线| 综合国产| 先锋成人资源| 国产熟妇搡BBBB搡BBBB毛片 | 中文字幕日韩欧美| 黄页网站在线观看| av操逼网| 日韩资源站| 在线播放亚洲无码| 超碰成人AV| 久久国产片| 亚洲av中文| 四虎av| 人人看人人搞人人摸| 亚洲性爱大全| 天堂a在线8| 成人黄色小电影| 五月涩| 波多野结衣无码AV在线| 日韩无码播放| 欧美日韩国产成人电影| 3D动漫精品啪啪一区二区免费| 无码熟妇人妻无码AV在线天堂| 天堂免费视频| 人人艹在线观看| 日韩欧美毛片| 一级片免费观看视频| 亚洲av资源| 日韩中文字幕在线免费观看| 人人干天天干| 99热这里有精品| 男人天堂网在线| 99精品视频在线观看| 黄色一级在线| 骚逼自拍| 中文字幕在线不卡视频| 综合色区| 国产激情视频在线观看| 超碰老熟女| 噼里啪啦免费观看视频大全| 欧美在线视频网| 嫩BBB槡BBBB槡BBBB视频-百度 | 东京热在线视频观看| 欧美福利| 成人网站在线观看免费| 秋霞亚洲| 91精品视频在线免费观看| 69成人视频| 肉乳无码A片av| 四川BBBB擦BBBB| 五月天亭亭.com| 天天操人人射| 欧美二区三区| 日本性爱无码| www.婷婷| 成人精品A片免费网站| 黄色视频免费观看国产| 大香蕉96| 99久久99九九99九九九| 女生自慰在线观看| 青青热久| 777色色色| 欧美一区二区三区精品| 91天天干| 偷拍92| 国产欧美综合三级伦| 黄色视频导航| 豆花视频成人精品视频| 三级视频网站| 高潮视频在线| 又黄又色的视频| 免费无码在线| 唐山熟女工棚嗷嗷叫| www.怡春院| 国产第七页| 成人精品视频在线| 成人小视频在线观看| 日韩三级AV在线观看| 高潮91PORN蝌蚪九色| 俺来俺也去www色在线观看| 亚洲无码99| 成人片成人片| 久久久久中文字幕| 99在线观看免费| 一线av| 日一日射一射| 东京热视频网址| 91视频在线观看网| 免费一级做a爱片毛片A片小说| 蜜桃性视频| 操逼视频免费观看| 日韩无码视| 骚逼影视| 免费在线观看内射| 天天爽夜夜| 91操B| 久久精品电影| 少妇高潮一区二区三区99| 一级特黄录像免费播放下载软件 | 精品无码免费视频| 五月天婷婷导航| 国产天堂在线| 青青草视频免费看| 精品视频日韩| 欧美一级黃色A片免费看小优视频 无码人妻精品一区二区三千菊电影 | 国产人妖av| 免费三级毛片| 蝌蚪窝在线观看| 91精品国产成人www| 久久综合17p| 免费看黄片的网站| 伊人成人在线| 北条麻妃成人视频| 天天艹| 亚洲中文无码在线| 亚洲视频入口| 亚洲免费观看高清完整版在线观| 日本人人操| 正在播放亚洲| 国产1级a毛a毛1级a毛1级| 内射久久| 韩国精精品视频| 精品免费一区二区三区四区| 亚洲黄色影视| 亚洲三级无码| 操逼三级片| 欧美一级婬片AAAAAA片| 91av在线看| 青青操原| 国产成人免费视频在线| 一级片在线观看视频| 色图插插插| 一区二区三区四区在线看| 天天撸天天操| 久久A√一区二区| 欧美日韩精品一区二区三区视频播放 | 国产女人高潮的AV毛片| 日韩精品一区二区三区黄冈站长| 500部大龄熟乱4K视频| 久久综合婷婷| 成人片免费看| 色色色五月| 日韩美女在线| 免费欧美黄色| 精精国产| 黄色视频高潮| 高潮喷水AⅤ| 狼人社區91國產精品| 九色自拍| 欧美另类激情| 99精品无码| 日韩大屌| 91AV在线电影| 黄色视频a| 成人看片黄a免费看视频| 曰本中文字幕在线视频| 欧美国产操逼| 北条麻妃无码| av人人| 影音先锋国产在线|