成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > MySQL唯一索引和普通索引選哪個(gè)?

MySQL唯一索引和普通索引選哪個(gè)?

熱門標(biāo)簽:石家莊電商外呼系統(tǒng) 芒果電話機(jī)器人自動(dòng)化 南通自動(dòng)外呼系統(tǒng)軟件 湖南人工外呼系統(tǒng)多少錢 申請(qǐng)外呼電話線路 廣東人工電話機(jī)器人 百度地圖圖標(biāo)標(biāo)注中心 信陽穩(wěn)定外呼系統(tǒng)運(yùn)營商 日照旅游地圖標(biāo)注

想象這樣一個(gè)場(chǎng)景,在設(shè)計(jì)一張用戶表時(shí),每人的身份證號(hào)是唯一的,需要搜索。但由于身份證號(hào)字段較大,不好將其作為主鍵。在業(yè)務(wù)代碼已經(jīng)保證插入身份證唯一的情況下,可以選擇建立唯一索引和普通索引,這時(shí)該如何選擇呢?接下來,將從查詢和更新的執(zhí)行過程進(jìn)行分析。

查詢過程

假設(shè) k 是表 t 上的索引,在搜索 select id from t where k=5 時(shí),會(huì)先從 k 這棵 B+ 的樹根開始,按層搜索葉子節(jié)點(diǎn),找到 k=5 的數(shù)據(jù)頁,然后在數(shù)據(jù)頁內(nèi)容進(jìn)行二分法定位。

對(duì)于普通索引,找到 k=5 的記錄后,會(huì)繼續(xù)向下查找一個(gè),直到碰到第一個(gè)不是 5 的記錄結(jié)束。

對(duì)于唯一索引,由于取值唯一,找到后直接停止。

由于 InnoDB 是按照數(shù)據(jù)頁為單位(數(shù)據(jù)頁默認(rèn) 16 KB)進(jìn)行讀寫的,在讀取一條數(shù)據(jù)時(shí),會(huì)將整個(gè)數(shù)據(jù)頁整體讀到內(nèi)存。 在讀入內(nèi)存的數(shù)據(jù)頁中,如果包含 k=5 的記錄,在查詢的情況下,唯一索引比普通索引多了一次查找和判斷的過程,可以忽略。

如果 k=5 是當(dāng)前數(shù)據(jù)頁的最后一條,就需要在讀取下一個(gè)數(shù)據(jù)頁。但這發(fā)生的概率較低,也可以忽略。

所以總得來說,普通索引和唯一索引在查詢的過程中差異不大。

change buffer

在分析唯一索引和普通索引的影響前,先來認(rèn)識(shí)一下 change buffer 這個(gè)結(jié)構(gòu)。

什么是 change buffer ?

在執(zhí)行更新操作時(shí),如果要更新的數(shù)據(jù)頁在內(nèi)存中就直接更新,否則的話,在不影響數(shù)據(jù)一致性的前提下,InnoDB 會(huì)將更新操作緩存在 change buffer 中,從而省去了從磁盤讀取數(shù)據(jù)頁的過程。在下次查詢操作讀取到恰好需要更新的數(shù)據(jù)頁時(shí),會(huì)將 change buffer 的更新語句執(zhí)行,寫入數(shù)據(jù)頁。將操作應(yīng)用到硬盤的過程叫 merge. 后臺(tái)線程會(huì)定期 merge 或 數(shù)據(jù)庫正常關(guān)閉時(shí),也會(huì)進(jìn)行 merge 操作。

merge 的執(zhí)行流程:

  1. 從磁盤讀入老版本數(shù)據(jù)頁。
  2. 從 change buffer中找出和該數(shù)據(jù)頁關(guān)聯(lián)的記錄,依次應(yīng)用,得到新版數(shù)據(jù)頁。
  3. 寫 redo log,記錄數(shù)據(jù)的變更和 change buffer 的變更。

change buffer 實(shí)際上是可以持久化到硬盤中的數(shù)據(jù),也就是說在內(nèi)存和硬盤上都 change buffer 的存在。change buffer 之前叫 insert buffer,開始只對(duì) insert buffer 有優(yōu)化,后來加上了對(duì) delete 和 update 的支持,進(jìn)而改名叫 change buffer。

可以看到,先將更新操作記錄在 change buffer,減少了將磁盤數(shù)據(jù)頁讀取到內(nèi)存的過程,語句的執(zhí)行速度會(huì)有很明顯的提升。同時(shí),將數(shù)據(jù)讀入內(nèi)存,會(huì)占用 buffer pool 內(nèi)存,所以減少讀操作,還提高了內(nèi)存使用率。

Buffer Pool 是內(nèi)存中的一個(gè)區(qū)域,InnoDB 在訪問表和索引數(shù)據(jù)時(shí)會(huì)在其中進(jìn)行緩存。允許在內(nèi)存中直接更新經(jīng)常使用的數(shù)據(jù),來加快處理速度。在一些專用的服務(wù)器上,會(huì)將 80% 的物理內(nèi)存分為 buffer pool.

可以通過 innodb_change_buffer_max_size 來設(shè)置 change buffer 占用 buffer pool 的大小。

change buffer 應(yīng)用場(chǎng)景?

如上面提到,change buffer 預(yù)先保存了更新記錄,減少了讀取數(shù)據(jù)頁的過程,從而提高性能。也就是說如果 change buffer 中針對(duì)不同的數(shù)據(jù)頁如果包含的更新記錄越多,其實(shí)收益也就越大。

因此對(duì)于寫多讀少的業(yè)務(wù)(更新完立即查詢)change buffer 發(fā)揮的作用也就越大。如常見的賬單類,日志類等系統(tǒng)。

如果業(yè)務(wù)是更新完立即查詢,雖然可以將更新記錄放在 change buffer 中,但由于之后要馬上查詢數(shù)據(jù)頁,所以會(huì)立即觸發(fā) merge 過程。這樣隨機(jī)訪問 IO 次數(shù)并不會(huì)減少,反而增加了 change buffer 的維護(hù)代價(jià),起到反效果。

更新過程

對(duì)于唯一索引來說,所有的更新操作都需要判斷是否違反唯一性約束。所以必須把所需要的數(shù)據(jù)頁讀入內(nèi)存,然后直接更新就可以,不需要使用 change buffer. 所以 change buffer 只對(duì)普通索引有用。

具體分析下,對(duì)于一張表插入一個(gè)新記錄:

如果新記錄要更新的數(shù)據(jù)頁在內(nèi)存中:

對(duì)于唯一索引,找到合適的位置,判斷有沒有沖突,插入值,語句結(jié)束。

對(duì)于普通索引:找到位置,插入值,語句結(jié)束。

所以數(shù)據(jù)頁在內(nèi)存時(shí),唯一和普通索引就差一個(gè)判斷的過程。可以忽略。

如果新記錄要更新的數(shù)據(jù)頁不在內(nèi)存中:

對(duì)于唯一索引,將數(shù)據(jù)頁讀入內(nèi)存,判斷沖突,插入,語句結(jié)束。

對(duì)于普通索引,將語句記錄在 change buffer 中,語句結(jié)束。

由于從磁盤到內(nèi)存涉及隨機(jī) IO 訪問,是數(shù)據(jù)庫成本最高的操作之一。普通索引比唯一索引減少的讀入操作,可以有很好的性能提升。

唯一或普通索引的選擇

通過在查詢和更新方面,兩者的比較。我們知道,在查詢過程中,除了極特殊情況,其實(shí)兩者的差異并不大。

主要的差異是在更新過程中,要更新的數(shù)據(jù)頁并不在內(nèi)容中的情況。這時(shí)唯一索引,由于需要唯一性檢查,不能利用 change buffer. 多了從磁盤到內(nèi)容讀取數(shù)據(jù)的過程,其中涉及隨機(jī) IO 的訪問,相對(duì)來說效率就低了。

所以如果業(yè)務(wù)需要更新不錯(cuò)的性能,這時(shí)可以選用普通索引。當(dāng)然一切都是建立在能保證數(shù)據(jù)準(zhǔn)確性的前提下。

當(dāng)如果更新后來緊接著查詢操作,可以考慮關(guān)掉 change buffer. 其他的情況,change buffer 都能有很好的提升。

特別針對(duì)機(jī)械硬盤,change buffer 效果很顯著。

redo log 和 change buffer 的比較

InnoDB 中 redo log 的出現(xiàn)使其具有了 crash-safe 的能力,同時(shí)還提高了效率,通過 WAL 先寫日志,再寫磁盤。

而 change buffer 是節(jié)省了從磁盤讀入數(shù)據(jù)頁到內(nèi)存的隨機(jī)IO過程。

下面通過一條插入語句來分析下兩者間的關(guān)系:

mysql> insert into t(id,k) values(id1,k1),(id2,k2);

假設(shè) k 為普通索引,k1 所插入的數(shù)據(jù)頁在內(nèi)存中, k2 不在。

執(zhí)行插入操作時(shí),主要涉及了圖中這四部分的內(nèi)容:

InnoDB buffer pool:內(nèi)存區(qū)域

redo log:日志

system table space(ibdata1):系統(tǒng)表空間

data(t.idb): 數(shù)據(jù)表空間

innodb_file_per_table 開啟時(shí),表被創(chuàng)建在獨(dú)立的表空間下,否則的話被創(chuàng)建在系統(tǒng)的表空間下。

執(zhí)行過程如下:

  1. k1 所在的 page1 在內(nèi)存中,直接更新內(nèi)存
  2. k2 所在的 page2 不在內(nèi)存中,記錄在 change buffer.
  3. 將 k1 和 k2 的操作記錄在 redo log.
  4. 提交事務(wù)。

可以看到這條更新語句(包括插入,刪除,更新操作)執(zhí)行成本很低,兩次寫入內(nèi)存,1次順序?qū)懭氪疟P。虛線的操作,是后臺(tái)操作,不影響響應(yīng)時(shí)間。

再來看一條查詢語句:

select * from t where k in (k1, k2)

假設(shè)讀語句發(fā)生在更新語句不久,內(nèi)存數(shù)據(jù)還在,此時(shí)讀操作就和系統(tǒng)表空間和 redo log 無關(guān)。

執(zhí)行過程:

  1. 讀取 k1 所在的 page1,在內(nèi)存中,直接返回。注意,并沒有讀磁盤上的數(shù)據(jù),而且磁盤上的數(shù)據(jù)還有可能是之前的版本的。
  2. 讀取 k2 所在的 page2,這時(shí)需要將 page2 從磁盤加載到內(nèi)存,并應(yīng)用 change buffer 的內(nèi)容,然后返回正確的結(jié)果。從這里也能看出,change buffer 不適用于更新完立馬去讀的情況。

總結(jié)下 redo log 和 change buffer 的關(guān)系:

存儲(chǔ)位置:change buffer 也會(huì)持久化在硬盤里,但保存在系統(tǒng)表空間 ibdata1 里。而 redo log 是單獨(dú)的文件。

記錄內(nèi)容:change buffer 記錄的是更新操作的內(nèi)容,而 redo log 記錄的是普通數(shù)據(jù)頁的修改和 change buffer 的改動(dòng)。

同步磁盤過程:同步內(nèi)存中數(shù)據(jù)頁的修改時(shí)通過 merge 操作進(jìn)行的,而不是根據(jù) redo log.

從更新的過程來看: redo log 將隨機(jī)寫磁盤的 IO 轉(zhuǎn)換成了順序?qū)?,?change buffer 則是節(jié)省了隨機(jī)讀磁盤的 IO 消耗。

如果服務(wù)器異常掉電,會(huì)不會(huì)導(dǎo)致 change buffer 丟失?

并不會(huì),因?yàn)?change buffer 中的數(shù)據(jù)已經(jīng)被記錄到 redo log 中,所以不會(huì)丟失。

由于 change buffer 一部分?jǐn)?shù)據(jù)在磁盤,一部分在內(nèi)存。對(duì)于在磁盤的數(shù)據(jù)已經(jīng) merge 所以不會(huì)丟失。
對(duì)于在內(nèi)存中的數(shù)據(jù):

  1. 如果 change buffer 寫入,但 redo log 未提交,binlog 未提交,事務(wù)會(huì)回滾,這部分?jǐn)?shù)據(jù)不存在。
  2. 如果 change buffer 寫入,redo log 寫入,binlog 寫入,并已提交,不會(huì)丟失。從 redo log 直接恢復(fù)。
  3. 如果 change buffer 寫入,redo log 寫入但未 commit,binlog 寫入,從 binlog 恢復(fù) redo log 再恢復(fù) change buffer.

參考資料

Buffer Pool

以上就是MySQL唯一索引和普通索引選哪個(gè)?的詳細(xì)內(nèi)容,更多關(guān)于MySQL唯一索引和普通索引的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Mysql普通索引與唯一索引的選擇詳析
  • MySQL普通索引和唯一索引的深入講解
  • mysql下普通索引和唯一索引的效率對(duì)比
  • MySQL 普通索引和唯一索引的區(qū)別詳解

標(biāo)簽:天津 阿里 沈陽 合肥 呼和浩特 惠州 公主嶺 牡丹江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL唯一索引和普通索引選哪個(gè)?》,本文關(guān)鍵詞  MySQL,唯一,索引,和,普通,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL唯一索引和普通索引選哪個(gè)?》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL唯一索引和普通索引選哪個(gè)?的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    小泽玛利亚一区二区免费| 亚洲国产伊人| 成人黄色理论片| 日韩精品av一区二区三区| 国产精九九网站漫画| 加勒比久久高清| 欧美精品xxxxx| 国产精品久久久爽爽爽麻豆色哟哟| 李宗瑞91在线正在播放| 久久久久久久久久一区二区| 久久免费视频观看| 亚洲一区精品电影| 免费成人高清| 亚洲国产福利视频| 懂色av蜜臀av粉嫩av分享吧最新章节| 香蕉久久久久久久av网站| 欧美日韩午夜| 亚洲精品av在线| 人妻丰满熟妇aⅴ无码| 自拍偷拍你懂的| 中文字幕在线播放不卡一区| 欧美最猛黑人xxxxwww| 国语自产精品视频在线看抢先版结局| 欧美 日韩 国产精品| 天天摸天天干| 欧美一级特黄aaaaaa在线看片| 国产www免费观看| 亚洲欧美日韩三级| 在线视频观看一区二区| 中文字幕亚洲欧美在线| 粉嫩精品导航导航| 深夜福利91大全| 久久先锋影音av鲁色资源| 一区二区三区四区欧美日韩| 高清不卡在线观看av| 99精品1区2区| 亚洲欧美天堂网| 国产91精品久久久久久久| 国产精品一区二区欧美黑人喷潮水| 精品理论电影在线| 69日小视频在线观看| 18成人免费观看网站下载| 最近中文字幕在线mv视频在线| 欧美大交乱xxxxxbbb| 3d欧美精品动漫xxxx无尽| 亚洲视频一区二区三区| www.夜夜| 巨大荫蒂视频欧美另类大| 国模私拍国内精品国内av| 成年人福利网站| 亚洲高清视频在线| 免费在线观看成人| 97视频网站| 日本精品一级二级| 中文字幕视频在线免费欧美日韩综合在线看| 成人免费网址在线| 午夜毛片在线| 欧美精品一区二区三区蜜臀| 国产亚洲欧美久久久久| 欧美中日韩免费视频| 国产男男gay体育生白袜| www欧美激情| 国产视频aaa| 亚洲理论在线观看| 美女av免费在线观看| 91久久奴性调教| 欧美日韩视频免费播放| av电影天堂一区二区在线| 大伊香蕉精品视频在线| 另类图片亚洲另类| 全球最大av网站久久| 欧美亚洲一区二区在线| 欧美成人乱码一二三四区免费| jizzyou欧美16| 男人的天堂视频在线| 亚洲男人的天堂在线视频| 好吊妞www.84com只有这里才有精品| 国产精品免费看| 艳妇乳肉豪妇荡乳av无码福利| 亚洲xxxxx性| 中文在线资源观看网站视频免费不卡| 99久久久无码国产精品免费蜜柚| 亚洲欧美一区二区三区国产精品| 黄色毛片网站| 免费在线观看av的网站| 国产激情视频在线看| 亚洲国产另类久久久精品极度| 五月婷婷在线观看视频| 国产99久久久国产精品潘金网站| 久久久久网址| 色哟哟无码精品一区二区三区| 国产亚洲美女精品久久久| 亚洲美女少妇撒尿| 国产精品无码永久免费不卡| 日韩中文在线中文网在线观看| 欧美h版在线| 欧美freesextv| 国产精品影音先锋| 97视频热人人精品免费| 在线观看免费av片| 日韩加勒比系列| 黄色美女视频在线观看| 福利视频导航网| 日韩美女网站| 久久久久久久久丰满| 亚洲嫩模很污视频| 91精品国产黑色紧身裤美女| 午夜三级在线观看| 成年人影院在线观看| 精品高清在线| 91玉足脚交白嫩脚丫| 黑人巨大亚洲一区二区久| 国产精品一区二区性色av| 香蕉在线播放| 欧美亚洲成人精品| 日韩a一级欧美一级| 欧美顶级少妇做爰| 一二三四日本在线| 中文字幕人妻熟女在线| 欧美三级韩国三级日本一级| av黄色免费在线观看| 一个色综合av| 最近2019中文免费高清视频观看www99| 狂野欧美激情性xxxx| 黄色av免费在线播放| 亚洲精品日产精品乱码不卡| 国产一区二区三区中文字幕| 日本黄色特级片| 久久久久国产精品免费| 日韩欧美一区二区三区四区五区| 成人女人免费毛片| 日韩激情电影免费看| 又粗又大的机巴好爽欧美| 欧美v亚洲v| 丰满岳乱妇一区二区| 日韩avxxx| 国产强被迫伦姧在线观看无码| 日韩不卡高清| 亚洲黄页在线观看| 亚洲欧洲午夜| 成人欧美一区二区三区在线播放| 牛牛影视久久网| 2021av网站| julia中文字幕一区二区99在线| 亚洲国产sm捆绑调教视频| 图片婷婷一区| 动漫美女无遮挡免费| 在线观看的网站你懂的| 久久久精品区| 国产高清视频一区二区| 欧美一区二区三区精美影视| 欧美三日本三级少妇三99| 国产mv免费观看入口亚洲| aaa在线免费观看| 情se视频网在线观看| 国产精品久久久久久亚洲毛片| 一区二区三区视频免费看| 亚洲乱码国产乱码精品| 国产伦精品一区二区三区视频网站| 小说区图片区综合久久88| 国内一区二区在线视频观看| 五月天av在线| 精品人伦一区二区三区| 国产麻豆日韩欧美久久| 99re这里只有精品视频首页| 久久精品一区二区三区不卡| 欧美 日韩 综合| 少妇伦子伦精品无吗| 黄动漫在线观看| 亚洲深深色噜噜狠狠爱网站| 色网在线免费观看| 天天舔天天操天天干| 免费搞黄视频| 国产对白叫床清晰在线播放| 久热中文字幕精品视频在线| 欧美黑人又粗又大又爽免费| 国产精品美女久久久久久久久| 天堂资源在线| 久久不卡国产精品一区二区| 国产精品久久久久av蜜臀| 凹凸av导航大全精品| 热久久这里只有精品| 青青草成人在线| 91亚洲国产成人精品一区二三| 色综合久久网| 欧美三级电影一区二区三区| 久久国产精品高清一区二区三区| 欧美成人一区二区三区在线观看| 国产一二三四在线| 国产午夜精品在线观看| 欧美性猛交xxxx免费看| 国产精品嫩草av| 无码少妇精品一区二区免费动态| 成品网站w灬+源码1688网页| 久久国产精品免费一区| 日本三日本三级少妇三级66| 久久在线精品视频| 在线观看视频网站你懂得| 亚洲精品日韩久久久| 成人免费在线电影| 精品中文字幕不卡在线视频| 极品色av影院| 国产制服91一区二区三区制服| 日韩一区二区三区四区区区| av在线不卡网| 精品婷婷伊人一区三区三| 久久久香蕉视频| 丰满的少妇愉情hd高清果冻传媒| 色欲av伊人久久大香线蕉影院| 欧美激情自拍| 成人精品三级| 日韩不卡一二三| 欧美亚男人的天堂| 国模无码大尺度一区二区三区| 91精品国产一区二区三密臀| 欧美精品在线看| 欧美性猛交xx乱大交| 开心婷婷激情五月| 亚洲资源在线观看| 日韩五码在线| 免费看h片网站| 精品久久久久久久| 成人精品水蜜桃| 亚洲精品第一国产综合野| 伊人久久精品一区二区三区| 最新中文字幕免费视频| 在线观看a网站| 亚洲熟女毛茸茸| 国产精品豆花视频| 韩国一区二区av| 国产又色又爽又黄刺激在线视频| 国产精品天干天干在线综合| 久久久精品视频网站| 电影一区中文字幕| 成人免费网站视频| 久久91超碰青草是什么| 毛片av一区二区三区| 欧美sss在线视频| 欧美美女操人视频| 亚洲黄色片在线观看| 亚洲性在线观看| 亚洲一区二区三区四区精品| 欧美淫片网站| 在线区一区二视频| 在线视频你懂得一区二区三区| 超碰网在线观看| 国产精品毛片久久久久久久| 国产色产综合色产在线视频| www国产免费| 欧美视频xxx| 91美剧网在线播放| 91麻豆福利精品推荐| 亚洲一区av在线| 欧美日本一区二区| 天天色天天射综合网| 精品黑人一区二区三区久久| 黄色高清视频| 日本综合视频| 免费一级在线观看| 精品一区二区成人免费视频| 国产精品久久久久久久小唯西川| 同心难改在线观看| 日韩性xxxx爱| 91麻豆精品91久久久久同性| 97人人模人人爽视频一区二区| 99久久免费精品国产免费| 激情欧美成人久久综合小说| 风间由美一区二区av101| 国产无遮挡又黄又爽又色| 国产精品亚洲成人| 蜜桃臀一区二区三区| 97超碰欧美中文字幕| 国产精品黄色av| 亚洲精品视频在线观看视频| 婷婷激情在线| 久久在线91| 亚洲欧美成人| 成人免费无码大片a毛片| 香蕉久久久久久久av网站| 俄罗斯av网站| 在线视频国产区| 精品人妻一区二区三区日产乱码卜| 噼里啪啦国语在线观看免费版高清版| 中国人体摄影一区二区三区| 男人的天堂在线视频免费观看| 日韩欧美中文在线视频| 伊人久久大香线蕉综合四虎小说| 欧美理论视频| 一区二区三区影院| 捷克做爰xxxⅹ性视频| 日韩av专区| 国产男女激情视频| 国产日韩欧美黄色| 欧美日韩一卡二卡| 日韩精品a在线观看91| 在线播放91灌醉迷j高跟美女| 亚洲电影小说图| 无码精品人妻一区二区三区影院| 亚洲三级在线观看视频| 亚洲精品在线视频免费| 小小女视频网站色琼网站| 日韩影院一区| 亚洲三区在线观看| 91小视频在线免费看| 国产一区二区三区四区三区四| 交videos老少配com| 亚洲色图都市小说| 国产精品99久久久久久成人| 色8久久人人97超碰香蕉987| 国产二区视频在线观看| 亚洲国产精品一区二区久久| 国产一级二级在线| 欧洲grand老妇人| 久久综合加勒比| 美女网站免费观看| 最好看的中文字幕久久| 国产精品国产精品国产| 韩国三级日本三级少妇99| 成人av在线资源网站| 三级免费网站| 99久久人妻无码中文字幕系列| 日韩av片在线| 亚洲精品自拍偷拍| 91福利视频在线观看| 91成人在线观看喷潮| 欧美体内谢she精2性欧美| 日韩一区二区三区免费看| 天堂va蜜桃一区二区三区漫画版|