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

MySQL中你必須知道的10件事,1.5萬(wàn)字!

共 13220字,需瀏覽 27分鐘

 ·

2020-12-14 09:56

攻擊性不大,侮辱性極強(qiáng)

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

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

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

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


SQL執(zhí)行順序

2、BinLog、RedoLog、UndoLog

BinLog

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

STATEMENT 模式

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

優(yōu)勢(shì):該模式下,因?yàn)闆](méi)有記錄實(shí)際的數(shù)據(jù),所以日志量和 IO 都消耗很低,性能是最優(yōu)的

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

ROW 模式

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

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

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

MIXED 模式

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

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

主從同步流程

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

2、從節(jié)點(diǎn)開(kāi)啟一個(gè)線程(I/O Thread)把自己扮演成 mysql 的客戶端,通過(guò) mysql 協(xié)議,請(qǐng)求主節(jié)點(diǎn)的二進(jìn)制日志文件中的事件 。

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

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

5、從節(jié)點(diǎn)啟動(dòng)另外一個(gè)線程(sql Thread ),把 Relay log 中的事件讀取出來(lái),并在本地再執(zhí)行一次。

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

  1. 全同步復(fù)制

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

  1. 半同步復(fù)制

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

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

RedoLog

可以先通過(guò)下面demo理解:

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

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

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

生意忙時(shí)選后者,因?yàn)榍罢咛闊┝恕5迷诿苊苈槁榈挠涗浿姓业竭@個(gè)人的賒賬總額信息,找到之后再拿出算盤計(jì)算,最后再將結(jié)果寫回到賬本上。

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

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

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

RedoLog有write poscheckpoint

write pos :是當(dāng)前記錄的位置,一邊寫一邊后移,寫到第3號(hào)文件末尾后就回到0號(hào)文件開(kāi)頭。

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

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

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

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

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

binlog跟redolog區(qū)別

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

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

  1. insert undo log

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

  1. update undo log

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

3、MySQL中的索引

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

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

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

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

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

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

索引的優(yōu)點(diǎn):

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

2、提高查詢速度?

3、加速表與表的連接?

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

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

索引的缺點(diǎn):

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

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

3、 索引需要磁盤的空間進(jìn)行存儲(chǔ),磁盤占用也很快。

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

索引設(shè)計(jì)的原則不應(yīng)該:

1、索引不是越多越好。索引太多,維護(hù)索引需要時(shí)間跟空間。

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

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

應(yīng)該:

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

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

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

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

索引失效的場(chǎng)景

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

2、隱式類型轉(zhuǎn)換:比如select * from t where name = xxx , name是字符串類型,但是沒(méi)有加引號(hào),所以是由MySQL隱式轉(zhuǎn)換的,所以會(huì)讓索引失效 3、當(dāng)語(yǔ)句中帶有or的時(shí)候:比如select * from t where name=‘sw’ or age=14

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

關(guān)于索引的知識(shí)點(diǎn)

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

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

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

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

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

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

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

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

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

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

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

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

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

InnoDB存儲(chǔ): * .frm文件是一份定義文件,也就是定義數(shù)據(jù)庫(kù)表是一張?jiān)趺礃拥谋怼?code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(40, 202, 113);">*.ibd文件則是該表的索引,數(shù)據(jù)存儲(chǔ)文件,既該表的所有索引樹(shù),所有行記錄數(shù)據(jù)都存儲(chǔ)在該文件中。

MyISAM存儲(chǔ)* .frm文件是一份定義文件,也就是定義數(shù)據(jù)庫(kù)表是一張?jiān)趺礃拥谋怼?code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(40, 202, 113);">* .MYD文件是MyISAM存儲(chǔ)引擎表的所有行數(shù)據(jù)的文件。* .MYI文件存放的是MyISAM存儲(chǔ)引擎表的索引相關(guān)數(shù)據(jù)的文件。MyISAM引擎下,表數(shù)據(jù)和表索引數(shù)據(jù)是分開(kāi)存儲(chǔ)的。

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

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

4、SQL事務(wù)隔離級(jí)別

ACID的四個(gè)特性

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

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

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

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

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

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

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

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

在說(shuō)隔離級(jí)別之前,你首先要知道,你隔離得越嚴(yán)實(shí),效率就會(huì)越低。因此很多時(shí)候,我們都要在二者之間尋找一個(gè)平衡點(diǎn)。SQL標(biāo)準(zhǔn)的事務(wù)隔離級(jí)別由低到高如下:上圖從上到下的模式會(huì)導(dǎo)致系統(tǒng)的并行性能依次降低,安全性依次提高。

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

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

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

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

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

5、MySQL中的鎖

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

悲觀鎖

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

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

樂(lè)觀鎖

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

缺點(diǎn):在寫多讀少的并發(fā)場(chǎng)景下,即在寫操作競(jìng)爭(zhēng)激烈的情況下,會(huì)導(dǎo)致CAS多次重試,沖突頻率過(guò)高,導(dǎo)致開(kāi)銷比悲觀鎖更高。

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

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

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

讀-寫:有隔離性問(wèn)題,可能遇到臟讀,幻讀,不可重復(fù)讀

寫-寫:可能存更新丟失問(wèn)題,比如第一類更新丟失,第二類更新丟失

兩類更新丟失問(wèn)題:

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

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


鎖分類

MySQL支持三種層級(jí)的鎖定,分別為

  1. 表級(jí)鎖定

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

  1. 頁(yè)級(jí)鎖定

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

  1. 行級(jí)鎖定

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

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

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

InnoDB中的鎖

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

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

意向鎖(Intention Locks)?

記錄鎖(Record Locks)?

間隙鎖(Gap Locks)?

臨鍵鎖 (Next-Key Locks)?

插入意向鎖(Insert Intention Locks)?

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

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

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

為了確保自己查到的數(shù)據(jù)沒(méi)有被其他的事務(wù)正在修改,也就是說(shuō)確保查到的數(shù)據(jù)是最新的數(shù)據(jù),并且不允許其他人來(lái)修改數(shù)據(jù)。但是自己不一定能夠修改數(shù)據(jù),因?yàn)橛锌赡芷渌氖聞?wù)也對(duì)這些數(shù)據(jù)使用了 in share mode 的方式上了S 鎖。如果不及時(shí)的commit 或者rollback 也可能會(huì)造成大量的事務(wù)等待

for update排它寫鎖:

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

Gap Lock間隙鎖:

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

2、間隙鎖和行鎖合稱NextKeyLock,每個(gè)NextKeyLock前開(kāi)后閉區(qū)間

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

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

2、查找過(guò)程中訪問(wèn)到的對(duì)象才會(huì)加鎖。

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

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

5、唯一索引上的范圍查詢會(huì)訪問(wèn)到不滿足條件的第一個(gè)值為止。

6、MVCC

MVCC:

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

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

MySQL InnoDB下的當(dāng)前讀和快照讀

  1. 當(dāng)前讀

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

2、當(dāng)前讀可以認(rèn)為是悲觀鎖的具體功能實(shí)現(xiàn)

  1. 快照讀

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

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

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

因?yàn)榇罄胁粷M意只讓數(shù)據(jù)庫(kù)采用悲觀鎖這樣性能不佳的形式去解決讀-寫沖突問(wèn)題,而提出了MVCC,所以我們可以形成兩個(gè)組合:

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

MVCC + 樂(lè)觀鎖:MVCC解決讀寫沖突,樂(lè)觀鎖解決寫寫沖突

MVCC的實(shí)現(xiàn)原理

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

四個(gè)隱式字段

  1. DB_TRX_ID:

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

  1. DB_ROLL_PTR

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

  1. DB_ROW_ID

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

  1. FLAG

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

事務(wù)對(duì)一條記錄的修改,會(huì)導(dǎo)致該記錄的undo log成為一條記錄版本線性表(鏈表),undo log的鏈?zhǔn)拙褪亲钚碌呐f記錄,鏈尾就是最早的舊記錄。

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

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

你可以簡(jiǎn)單的理解為MVCC為每一行增加了兩個(gè)隱藏字段,兩個(gè)字段分別保存了這個(gè)行的當(dāng)前事務(wù)ID跟行的刪除事務(wù)ID。

  1. insert時(shí):

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

  1. select時(shí):

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

2、行的刪除版本要么未定義,要么大于當(dāng)前事務(wù)版本號(hào),這可以確保事務(wù)讀取到的行在事務(wù)開(kāi)始之前未被刪除。

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

  1. delete時(shí):

InnoDB會(huì)為刪除的每一行保存當(dāng)前系統(tǒng)的版本號(hào)(事務(wù)的ID)作為刪除標(biāo)識(shí).

  1. update時(shí):

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

上面只是一個(gè)淺顯的講解MVCC選擇標(biāo)準(zhǔn)流程,源碼層面應(yīng)該是根據(jù)低水位高水位來(lái)截取的。具體實(shí)現(xiàn)可自行百度。

重點(diǎn)

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

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

7、緩沖池(buffer pool)


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

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

2、緩沖池(buffer pool) 是一種常見(jiàn)的降低磁盤訪問(wèn) 的機(jī)制;

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

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

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

預(yù)讀失效

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

緩沖池污染

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

8、table瘦身

空洞

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

重建表思路

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

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

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

重建表指令

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

2、推薦Github:gh-ost

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

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

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

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

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

隨機(jī)查詢

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

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

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;

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

exist 和 in 對(duì)比

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

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

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

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

10、MySQL優(yōu)化

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2、VARCHAR的長(zhǎng)度只分配真正需要的空間?

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

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

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

讀寫分離

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

分庫(kù)分表分庫(kù)分表分為垂直和水平兩個(gè)方式,一般是先垂直后水平

1、垂直分庫(kù):將應(yīng)用分為若干模塊,比如訂單模塊、用戶模塊、商品模塊、支付模塊等等。其實(shí)就是微服務(wù)的理念。

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

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

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

目前主要流行的分庫(kù)分表工具 就是Mycatsharding-sphere。

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

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

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

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

4、TiDB 支持和 MySQL 的互備。

5、遵循jdbc原則,學(xué)習(xí)成本低,強(qiáng)關(guān)系型,強(qiáng)一致性,不用擔(dān)心主從配置,不用考慮分庫(kù)分表,還可以無(wú)縫動(dòng)態(tài)擴(kuò)展

適合:

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

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

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

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

不適合:

1、單機(jī) MySQL 能滿足的場(chǎng)景也用不到 TiDB。

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

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


往期推薦

這8種常見(jiàn)的SQL錯(cuò)誤用法,你還在用嗎?


用好MySQL的21個(gè)好習(xí)慣!


忘記MySQL密碼怎么辦?一招教你搞定!


關(guān)注我,每天陪你進(jìn)步一點(diǎn)點(diǎn)!


瀏覽 60
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 成人无码激情| 成人久久视频| 婷婷精品在线视频| 五月天福利影院| 国产又粗又大又黄视频| 精品國產一區二區三區久久蜜月| 免费国产视频| 在线视频一区二区三区| av影音在线| 影音先锋成人无码| 四色影视| 久操麻豆| 亚洲国产精| 亚洲青草视频| 亚洲无码天堂| 99人妻视频| 欧美性爱91| 高清无码做爱视频| 亚洲小视频在线播放| 免费看的操逼视频| 亚洲福利在线免费观看| 伊人在线综合| 成人做爱免费看| 懂色中国闺密偷情懂色AV| 黑人无码视频| 婷婷av在线| 天天射天天爽| 国产精品久久毛片A片| 91在线无码精品秘入口男同 | 18成人在线观看| 在线观看免费黄| 欧美大片视频| 蜜桃视频| 99在线免费观看| 久久99老妇伦国产熟女| 国产精品国产三级国产专业不| 丁香五月天社区| 蜜臀av在线播放| 一区电影网| 先锋AV资源在线| 3D精品啪啪一区二区三区| 人妻三级| 加勒比在线视频| 日韩gay| 国产黄色免费| 欧美、日韩、中文、制服、人妻| 亚洲精品一区二三区不卡| 伊人久久免费| 久草免费电影| 成人网站毛片| 国产AV资源网| 日逼欧美| 97精品人妻一区二区三区在线| 99看片| 国产91视频在线观看| 国产av播放| 国产91免费| 日本99视频| 国产剧情一区二区| 国产极品无码| а√天堂中文官网8| 亚洲精品另类| 中文原创麻豆传媒md0052| 亚洲精品字幕久久久久| 韩国三级中文字幕HD久久精品| 俺来也官网欧美久久精品| 亚洲无码在线播放| 99热国产| 人人摸人人草| 亚洲777| 天天日天天干天天射| 嫩草人人精品免费| 日韩人妻精品无码| 人人妻人人爱| 天天干夜夜爽| 成人一级精品| 人妻电影亚洲av| 黄片网址| 欧美激情四射老司机| 午夜操逼| 亚洲第一网无码性色| 最新97色黄色精品高清网站| 强伦轩人妻一区二区三区最新版本更新内容| www.黄片| 超碰199| 久久手机电影| 中文字幕淫乱视频欧美| 亚洲性生活| 激情一级片| 国产女人精品视频| 草逼A片| 51精品国产午夜福利| 最好看2019中文在线播放电影| 精品女同一区二区三区四区外站在线 | 人妻人人妻| 欧美aaaaaa| 俺也去大香蕉| 亚洲乱码中文字幕| 日韩中文字幕免费在线观看| 波多野结衣高清视频| 日韩理论在线| AV日日| 亚洲精品18禁| 一级特黄毛片| 日本成人电影一区二区三区| a久久| 亚洲高清成人| 国产一区二区三区在线观看免费视频免费视频免费视频 | 国产夫妻自拍AV| 亚洲国产日本| 草草久久久无码国产专区的优势 | 日韩一区二区三区四区| 男女日皮视频| 亚州精品国产精品乱码不99勇敢| 11孩岁女精品A片BBB| 尻屄电影| 天天色天天撸| 日韩成人大片| 久久婷婷五月综合伊人| 国产草草| 在线播放JUY-925被丈夫上司侵犯的第7天| 中文字幕在线有码| 毛片区| 一级日韩| 色图在线观看| 青青草综合视频| 欧美日韩在线视频免费播放| 丁香婷婷五月基地| 日中文字幕| 免费观看操逼| 北条麻妃无码精品| 成人国产在线| 欧美日本国产| 午夜操爽| 国产欧美一区二区三区特黄手机版 | 亚洲性爱自拍| 欧美成人黄色电影| 欧美国产日韩欧美亚洲国产| 黄总av| 亚洲国产综合AV在线| 真人一级毛毛片| 五月天三级片| 蜜臀久久99精品久久久兰草影视| 操少妇视频| 成人A片免费| jizz亚洲| 国产成人a亚洲精品www| AV婷婷在线| 亚洲一区二区免费视频| 一级无码在线观看| 午夜成人视频在线观看| 久久久久久久性爱| 国产成人久久777777黄蓉| chip少妇性| 亚洲欧美婷婷五月色综合| 欧美最猛黑A片黑人猛交蜜桃视频| 欧美日韩第一区| 丁香五月婷婷久久| 天天综合天天做天天综合| 亚洲一区中文字幕| 亚洲中文视频| 小早川怜子精品一区二区| 影音先锋蜜桃| 福利视频三区| 操逼a片| 河南少妇搡BBBB搡BBBB | 五月天四房播播| 国产色拍| 一级A片亲子乱中文| www.亚洲精品| 四虎在线观看| 人人操人人爽人人爱| 青青国产在线观看| 人妻av无码| 欧美网站在线观看| 美女做爱视频| 肏少妇女情人大骚逼直播一区二区 | 免费v片在线| 在线成年人视频| 国产精品一色哟哟哟| 久久99人妻无码精品一区| 韩日一区二区| 色悠悠久久| 少妇搡BBBB搡BBB搡毛片| 我要操逼网| 黄色片大全| 中文字幕第12页| 欧美后门菊门交3p| 亚洲天堂色| 欧美成人黄色电影| 成年人性生活免费视频| 成人影视在线免费观看| 日韩av中文字幕在线| 国产青青| 青青五月天| 一本大道久久久久| 欧美AAA在线观看| 亚洲精品一区二区三| 黄色国产| 三级不卡视频| 欧美一级成人| 亚洲欧洲日韩| 午夜免费福利| 国产成人精品毛片| 亚洲成人777| 456亚洲影院| 人人看人人摸人人操| 国产女主播在线播放| 国产精品福利在线播放| 国产麻豆性爱视频| 丁香五月中文字幕| 人人妻人人澡人人爽久久| 黄色大片视频| 韩国精品在线观看| 影音先锋三级| 亚洲欧美国产另类| 一级看片免费视频| 亚洲成人精品视频| 亚洲一区二区在线| 亚洲国产免费视频| 99热精品国产| 高h视频在线观看| 亚洲高清人妻| 国产91在线一区| 大香蕉超碰在线| 国产高清在线视频| 精品国产午夜福利| av在线资源播放| 骚逼av| 男人av网站| 丁香婷婷五月基地| 丁香五月婷婷六月| 亚洲激情在线| 69AV电影| 国产三级片精品| 国产一级大片| 玖玖中文字幕| 黄色电影天堂网| 日韩免费视频一区二区| 四虎国产精品成人久久| www.91madou| 色色色网站| 91探花秘在线播放| 婷婷丁香五月网| 欧美成人精品在线观看| 日韩三级毛片| 中文字幕北条麻妃| 人妻精品在线| 一区二区高清无码| 亚洲高清无码一区二区| 天天撸一撸视频| www.狠狠操| 日日爱99| 成人黄色视频免费| www.sesese| 亚洲图片在线| 中文字幕永久在线观看| 中文字幕在线免费| 国产欧美另类| 国产精品1区2区| 久久6| 成人精品一区日本无码网站suv/| 人妻二区| 久久人妻无码中文字幕系列| 51精品日本| 91女人18毛片水多的意思| 欧美熟女性爱| 色综合久久久| 久久伊| 久久久久国产精品视频| 亚洲性爱在线播放| 亚洲日韩精品中文字幕| 欧美影院亚洲| 亚洲无码电影网站| 美女黄色视频永费在线观看网站| 国产成人TV| 爆乳一区二区| 人操人人人操| 91蝌蚪在线观看| 日本高清无码| 日韩中文字幕国产| 嗯啊av| 败火老熟女ThePorn视频| 久草视频福利在线| 亚洲人BBwBBwBBWBBw| 亚洲视频精选| 日韩特级毛片| 色94色.欧美.setu| 国产又粗又猛又爽又黄91精品 | 亚洲高清无码中文字幕| 亚洲区无码| 亚洲人操逼视频| 国产在线激情| 日韩精品中文无码| 欧美理论片在线观看| www.日韩系列| 无码一级二级| 无码人妻一区二区三区四区老鸭窝| 日韩一本道在线| 亚洲欧美日韩一区二区| 国产免费操逼| 91九色91蝌蚪91成人| 成人性生活视频| 在线黄色视频网站| 热热av| 国产乱码一区二区三区| 国产无套内射在线观看| 91无码国产| 无码精品成人观看A片| AAA黄片| 亚洲国产精品精JIZZ老师| 西西444www无码精品| 激情啪啪网站| 三级片中文| 吴梦梦《女教师时间暂停》| 久久久久久久久久久国产| 五月天成人社区| 亚洲精品麻豆| 黄色片a| 91精品久久久久久综合五月天| 五月婷亚洲精品AV天堂| 国产成人精品a视频| 欧美日韩激情视频| 天天操天天操免费视频| 国产成人精品无码| 亚洲精品三级| 免费在线看A| 成人视频在线播放| 欧美日韩性色无码免费| 安徽妇搡BBB搡BBBB户外老太太 | 噜噜噜噜射| 日韩aaaaaa| 永久免费看A人片无码精| 久热在线精品视频| 日韩精品在线免费视频| 天码人妻一区二区三区在线看| 99视频在线免费观看| 国产AV无码专区| 蝌蚪窝视频在线观看| 免费在线观看视频a| 中文字幕第八页| 无码国产99精品久久久久网站| 无码精品人妻一区二区三区漫画| 日韩三级视频在线观看| 麻豆视频在线| 久久草视频在线播放| 欧美三级欧美成人高清| 天堂综合网久久| 激情综合五月| 蜜桃在线无码| 欧美综合在线观看| 少妇人妻一级A毛片| 99久久99九九99九九九| 午夜久久福利| 图片区视频区小说区| 99高清国产| 东京热这里只有精品| 亚洲熟妇AV日韩熟妇在线| 亚洲热在线| 在线黄色视频网站| 99久久九九| 一个人看的视频www| www久久久| 亚洲AV成人无码精品| 亚洲精品成人| 一二三四区视频| а√天堂中文最新版8| 亚洲无码123| 中文字幕一区二区三区人妻在线视频| 成人免费视频国产免费麻豆,| 懂色一区二区二区在线播放视频| 91亚洲一线产区二线产区| 无码孕妇| 偷拍一区二区| 国产精品成人在线视频| 一区二区无码视频| 日本aa视频| 五月天婷婷操逼视频| 日韩欧美操逼视频| 黑人中文字幕| 久草久| 精品国产AV无码一区二区三区| 国产免费AV片| 欧美在线视频网| 黄色视频在线观看免费| 亚洲欧美成人网站| 91成人免费电影片| 91禁樱桃在线| 六月婷婷在线| 欧美操B| 色播一区| 亚洲无码高清在线观看视频| 性欧美69| 亚洲A片视频| 亚洲一卡二卡| 亚洲AV一二三区| AⅤ中文字幕在线免费观看| 免费观看一区二区三区| 黄p网站| 黑人操白人| 精品无码一区二区三区在线| 日本黄色免费网站| 玖玖资源站中文字幕| 吴梦梦| 一区二区三区高清| 中文字幕免费无码| 五月天网址| 国产办公室丝袜人妖| 国产精品扒开腿| 成人视频一区二区| 中文字幕在线乱| 日韩东京热中文字幕| 色综合天天综合| 日韩操逼av| 国产无码激情视频| 色噜噜一区二区三区| 操青青| 国产成人av网站| 国产又爽又黄免费观看| 日韩小电影| 老熟妇一区二区三区啪啪| 亚洲一区黄色| 天天操天| 九九热视频在线观看| 免费的一级A片| 久久99老妇伦国产熟女| 日本韩国欧美18| 在线观看AV91| 国内老熟妇对白HDXXXX| 亚洲国产欧美在线| 欧美成人视频| 91网站免费在线观看| 久久久精品在线| 中文字幕精品无码亚| 天天插天天日| 山东乱子伦视频国产| 天天插天天干| 日韩精品人妻中文字幕有| 亚洲午夜福利一区二区三区| 99er热精品视频| 四虎成人无码A片观看| 插菊花综合网亚洲| 另类激情| 激情五月婷婷色| 色欲成人AV| 成人片网址| 欧美在线免费视频| 亚洲欧洲在线播放| 欧美一级黄色电影| 日本欧美在线播放中文| 精品女同一区二区三区四区外站在线| 国产精品成人无码免费| 成人无码免费一区二区中文| 亚洲无码一区二区在线| 日逼无码| 亚洲精品久久久久avwww潮水 | 深爱婷婷| 欧美一级视频在线观看| 亚洲第一黄| 91在线无码精品秘国产三年| 欧美18禁网站| 国产精品无码无套在线照片| 2025四虎在线视频观看| 久久综合中文| 色综合999| 日本一级黄色电影网| 国产做受91一片二片老头| 日韩中文字幕无码中字字幕| 久久久老熟女一区二区三区91| 色婷婷视频在线观看| 亚洲无码成人视频| 欧美A级成人婬片免费看| 手机免费Av| 国产高清无码自拍| 国产女人18毛片水18精品| 国产熟妇搡BBBB搡BBBB搡| 中文字幕视频在线观看| 日本在线精品视频| 九九热视频99| 亚洲国产视频在线观看| 青青草无码视频| 国产一级二级视频| 一区免费在线观看| 黃色A片一級二級三級免費久久久| 激情动态视频| 国产熟女露脸普通话对白| 黄网站欧美内射| 日韩a| 国产精品久久久久久久久久久久久久| 欧美日韩色情| 中文av网站| 免费亚洲婷婷| 国内自拍一区| 亚洲网站免费观看| 一级a一级a爰片免费免免在线| 一级性爱视频| 在线观看视频黄| 亚洲肏屄网| AV婷婷在线| 人妻人玩| 91小宝寻花一区二区三区三级| 婷婷狠狠操| 日韩不卡视频在线观看| 九九久久影院| 精品国产99| 欧美日韩国产中文字幕| 在线视频一区二区| 国产成人精品国内自产拍免费看 | 牛牛AV| 99久久久久久| 久热草| 国产欧美综合一区二区| 粉嫩一区二区三区四区| 亚洲一区视频| 在线播放JUY-925被丈夫上司侵犯的第7天 | 91人妻最真实刺激绿帽| 一区二区经典| 国产乱子伦-区二区| 操逼一区| 7777av| 久久污| 青娱乐日韩| 欧美国产日韩视频| 青草社区在线观看| 伊人久久影院| 人人射视频| 婷婷五月天丁香网| 思思热在线视频精品| 一级a片激情啪啪免费观| 国产精品成人AV片| 日韩有码电影| 成人网大香蕉| 浮力影院av| 免费观看高清无码视频| 国产激情久久| 国语对白做受欧美| 欧美性受XXXX黑人XYX性爽冫| 日韩黄色av| 亚洲精品久久久久毛片A级绿茶| 午夜成人免费福利| 九鼎联盟骗子| 加勒比精品| 日韩高清无码不卡| 人人色人人操人人干| 99国产一区| 特级西西444www高清大胆免费看| 杨晨晨不雅视频| 大香蕉伊人在线观看| 3p绿帽黑人看自己老婆| 日韩不卡视频在线| 国产精品一级a毛视频| 男女草逼视频| 火淫玖玖免费精品| 国产成人三级| 99久久久久久久| 成人片无码| 影音先锋国产在线| 丁香五月在线播放| 操小逼视频| gogogo视频在线观看黑人| 欧美一级性爱| 国产精品无码白浆高潮| 免费AV在线播放| 久久久久久久久久久国产| 国产一级二级三级久久久| 青草成人在线| 一级黄色视频日逼片| 久久在线视频| 日韩无码一二三| 四季AV综合网站| 粉嫩护士小泬18p| 国产精品久久毛片| 中文字幕乱码视频| 亚洲AV中文在线| 久久久亚洲AV| 影音先锋资源| 丰滿老婦BBwBBwBBw| 一级黄色电影在线观看| 六月丁香视频| 91人妻人人爽人人澡人人爽 | 亚洲国产欧美在线| 亚洲免费观看高清完整| 精品一区二区三区av| 网络自拍亚洲激情| 青娱乐国产| 人人插人人摸| 丝袜足交视频| 99这里有精品视频| 激情五月天视频| 亚洲大逼| 一级片黄片| 成人一级黄色片| 欧美日韩在线观看一区二区三区 | 91蝌蚪91九色| 成人做爰100片免费视频| 丰满人妻一区二区三区精品高清| 中文字幕无码毛片| 亚洲一级免费免费在线观看| 国产精品视频免费观看| 亚洲乱伦网| 亚洲欧洲视频| 无码精品人妻一区二区三区漫画| 91香蕉国产在线观看软件| 再深点好爽灬轻点久久国产 | AV一二区| 人妻少妇偷人精品无码免费| 亚洲无码电影在线观看| 水蜜桃一区二区| 久久系列| 色五月婷婷中文字幕| 99热在线看| 亚洲无码制服| 亚洲无码电影网站| 狠狠操狠狠操狠狠操| 日本高清无码在线观看| 日韩视频――中文字幕| 久热精品在线观看视频| 国产高清中文字幕| 久久人人操人人| 欧美黄色免费在线观看| 无码一页| 国产乱子伦真实精品!| 青娱乐亚洲视频在线| 久热中文在线观看精品视频| 亚洲综合网在线| 中文字幕无码毛片| 在线观看AV无码| 国产在线欧美在线白浆| 久久夜色精品噜噜亚洲AV| 亚洲美眉综合网| 色色一区| 娇小,学生,高潮,videos| 伊人中文字幕| 秋霞福利视频| 四川BBBB擦BBBB| 成人网视频| 亚洲影音先锋| 国产精品无码怀孕软件| 国产精品久久久久久久久久王安宇 | 国产AV在| 91精品国产91久久久久久久久久| 91成人国产| 一区二区三区色| 国产91精品探花一区二区| 另类色综合| 色综合天天综合| 国产精品99久久久久久成人| 欧美丰满美乳XXⅩ高潮www| 国产AV久久| 一区二区三区视频在线| 久久黄色免费视频| 成人做爰A片免费看网站| eeuss国产| 黄色视频在线观看国产| 亚洲欧美国产日韩字幕| 亚洲国产精品成人久久蜜臀| 天天色天天日天天干| 影音先锋日韩精品| 黄a在线观看| 精品国产一区二区三区久久久蜜月 | 无码高清在线观看| 无码免费视频| 青青五月天| 翔田千里被躁120分钟| 人人摸人人操人人摸| 亚洲高清无码播放| 韩国成人无码视频| 男女草逼视频| 嫩BBB槡BBBB槡BBBB| 在线视频福利| 欧美黄色一级网站| av一区在线观看| 国产无码观看| 高清无码在线免费观看视频| 国产成人大香蕉| 免费无码婬片AAAA片老婦| 中文字幕av第一页| 自拍视频在线观看| 亚洲第五页| 91久久久久久| 最新国产AV| 超碰麻豆| 亚洲综合无码| 韩国深夜福利视频| 国产91一区在线精品| 毛片2| 亚洲va欧美ⅴa在线| 99热官网| 韩国无码视频在线观看| 人妻少妇精品无码| 久操婷婷| 哪里能看毛片| 在线有区别亚洲| 日本中文字幕在线视频| 五月天性爱视频| 中文字幕的| 996热| 手机AV网站| www.seses| 特级西西444www大胆高清图片 | sm国产在线调教视频| 伊人综合影院| 黄色视频在线观看免费网站| 亚洲中文婷婷| 国产一二三四区| 成人无码中文字幕| 国产精品大香蕉| 国产換妻4P视频| 日韩中文字幕永久| 成人天天爽| 澳门无码视频| 尤物在线免费视频| 欧美三级美国一级| 91探花视频| 亚洲av观看| 人妻一区二区三区| 亚洲精品国产精品乱玛不99| 婷婷五月天丁香成人社区| 俺去也av| 国产欧美日韩在线播放| 午夜AV福利| 国产视频福利在线| 无码一区二区三区四| 亚洲性爱一区| 驲韩在线视频免费观看| 国产乱伦熟女| 免费av中文字幕| 婷婷亚洲精品| 波多野结衣无码AV| 成人无码一区二区三区| 国产在线小电影| 青娱乐精品视频| aaa免费| 人人人干| 影音先锋色AV| 亚洲日韩视频在线播放| 国产又爽又黄在线看| 欧洲一区二区| 国产成人+综合亚洲+天堂| 亚洲成人在线视频观看| 日本亚洲精品秘入口A片| 天天日日干| 久久精品毛片| 婷婷午夜精品久久久久久性色AV | 乱伦三区| 黄片视频免费看| 亚洲欧美日韩无码| 51国产视频| 三级无码片| 在线天堂AV| 国产精品一二区| 天堂在线视频| 先锋久久资源| 超碰成人欧美| 翔田千里50岁无码| 国产高清自拍视频| 国产黄色视频在线| 人人爽亚洲AV人人爽AV人人片| 超碰免费视| 2025最新国产成人精品| 911精品国产一区二区在线| 18禁一区二区三区| 青春草视频| 亚洲精品A片| 一级a片免费| 成人在线欧美| 懂色av,蜜臀AV粉嫩av| 亚洲高清免费| 老司机在线免费视频| 亚洲无码。| 日韩操逼电影| 亚洲A级毛片| 高清无码免费视频| 五月婷婷狠狠爱| 加勒比无码视频| 日韩性做爰免费A片AA片| 操美女逼逼| 亚洲高清无码视频| 国产一区视频18| 亚洲精品久久久久毛片A级绿茶| 在线免费看A片| 久久精品三级片| 奶大丰满一乱一视频一区二区三区在| 五月天婷婷小说| 五月丁香色播| 蜜桃视频成人app| 五月丁香在线视频| 日本成人A| www.91madou| 很很干在线视频| 日韩高清无码中文字幕| 色色色无码| 亚洲精品福利视频导航| 婷婷久久综合久| 成人网站免费在线观看| 亚州无码| 欧美日韩国产成人在线观看| 日韩激情av| 亚洲另类色图| 精品无码国产一区二区三区51安| 超碰91免费在线观看| 欧美福利在线观看| 欧美不卡一区二区三区| 嫩草人人精品免费| 成人一区二区在线| 高清无码在线视频观看| 亚洲熟女视频| 成人无码区免费A片久久鸭| 蝌蚪窝免费在线视频| 国产精品美女久久久久AV爽| 国产精品久久久久久久久久久久久久| 97超碰人人| 超碰观看| 伊人精品在线| 日皮视频免费看| 欧美曰皮免费看| 日韩在线99| 亚洲无码色| 最好看的MV中文字幕国语电影| 思思热精品在线| 国产人妖网站| 成人操B| 国产一级A片| 九色无码| 色婷婷视频网站| 在线观看91| 五十路義母| 亚洲伊人大香蕉| AV在线免费观看网站| 国产美女精品久久AV爽| 丁香婷婷社区| 中文字幕+乱码+中文字幕电视剧| 国产人妖视频| 成人黄片在线免费观看| www久久99| 日韩色网站| 中文字幕人妻精品一区| 欧美日屄视频| 超碰人人人人人| 亲子乱婬一级A片| 一卡二卡三卡无码| 在线无码中文| 成人无码精品| 黄色A片网址| 欧美成人免费A级在线观看| 久草手机在线| 白峰美羽人妻AND-499| 日韩免费小视频| 亚洲日韩第一页| 蝌蚪窝在线免费观看视频| 宅男噜噜噜66一区二区| 免费黄色视频观看| 亚洲天堂一级片| 国产黄片一区二区三区| 人人搞人人摸| aaa少妇| 三级在线网| 亚洲天堂成人网| 激情AV在线观看| 操逼逼片| 黄色小视频免费观看| 无码日韩AV| 亚洲AV无码国产精品久久不卡| 国产91精品看黄网站在线观看 | 精品乱子伦一区二区三区,亚洲国产成| 久久久久亚洲AV无码专区成人| 五月天在线观看| www久久久| 国产色婷婷精品综合在线播放| 婷婷五月天小说| 国产精品天天AVJ精麻传媒| 免费看黄色毛片| 91成人电影在线| 超碰天天干天天摸| 影音先锋av在线资源| 国产三级网| 亚洲AV一二三| 欧洲美一区二区三区亚洲| 日韩久久精品| 精品国产AV色一区二区深夜久久 | 99看片| 操人妻视频| 蜜臀久久99久久久久久宅男| 四虎在线观看一区网址| 免费射精一二三区| 边添小泬边狠狠躁视频| 日韩色网站| 麻豆黄片| 五月丁香激情综合| 国产免费无码一区二区| 青娱乐在线精品| 强伦轩一区二区三区四区| 久草蜜臀| 青青草公开视频| 免费小视频| 探花在线播放| 99久久99九九九99九他书对| 极品美女援交在线| 国产成人精品久久| 日韩三级在线|