亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

數(shù)據(jù)庫(kù)怎么加索引 如何加索引


?????此賬號(hào)為華為云開(kāi)發(fā)者社區(qū)官方運(yùn)營(yíng)賬號(hào),提供全面深入的云計(jì)算前景分析、豐富的技術(shù)干貨、程序樣例,分享華為云前沿資訊動(dòng)態(tài)

本文分享自華為云社區(qū)《GaussDB(for MySQL)如何快速創(chuàng)建索引?華為云數(shù)據(jù)庫(kù)資深架構(gòu)師為您揭秘》,作者:華為云數(shù)據(jù)庫(kù)資深架構(gòu)師蘇斌 。
數(shù)據(jù)庫(kù)怎么加索引 如何加索引

文章插圖
蘇斌,華為云數(shù)據(jù)庫(kù)資深架構(gòu)師,擁有16年數(shù)據(jù)庫(kù)內(nèi)核研發(fā)經(jīng)驗(yàn),之前作為MySQL官方InnoDB團(tuán)隊(duì)主要研發(fā)人員,參與和主導(dǎo)了多個(gè)重要特性的開(kāi)發(fā)和發(fā)布 。目前在華為公司負(fù)責(zé)和參與華為云RDS主要產(chǎn)品RDS for MySQL和GaussDB(for MySQL)內(nèi)核功能的設(shè)計(jì)和研發(fā) 。
關(guān)于MySQL索引我們都知道,數(shù)據(jù)庫(kù)使用索引技術(shù)加快數(shù)據(jù)的查詢 。MySQL數(shù)據(jù)庫(kù)也支持若干種索引結(jié)構(gòu)提高查詢的性能(參見(jiàn)MySQL文檔:https://dev.mysql.com/doc/refman/8.0/en/create-index.html),其中使用最廣泛的是B tree索引,因?yàn)锽 tree索引在查詢和修改的性能之間有很好的平衡,同時(shí)其存儲(chǔ)和維護(hù)的代價(jià)也是比較優(yōu)的 。
MySQL的表本身由聚簇索引(必須是B tree索引)表示,再加上若干個(gè)二級(jí)索引,包括B tree索引,共同組成一個(gè)MySQL的獨(dú)立表,可以說(shuō)MySQL的表是由一組索引共同組成的 。我們都知道索引是一把雙刃劍,充分的索引可以更好地提升可以適配的查詢的性能,但是需要維護(hù)這些索引使得其和數(shù)據(jù)同步,所以在數(shù)據(jù)修改操作階段,更多的索引也會(huì)帶來(lái)更高的開(kāi)銷 。索引創(chuàng)建與否的權(quán)衡通常是動(dòng)態(tài)的,用戶不一定能做到在表定義之初就知道需要建立哪些索引,需要隨著業(yè)務(wù)的發(fā)展變化而調(diào)整索引,這也帶來(lái)了動(dòng)態(tài)索引創(chuàng)建的一些問(wèn)題 。
MySQL的索引創(chuàng)建邏輯我們先看一下MySQL索引創(chuàng)建的邏輯 。首先,MySQL索引的創(chuàng)建可以使用兩種不同的DDL(Data Definition Language: 數(shù)據(jù)定義語(yǔ)言)算法來(lái)實(shí)現(xiàn) 。第一種是COPY算法,它非常低效,就是在兩個(gè)表之間進(jìn)行數(shù)據(jù)拷貝,來(lái)完成表結(jié)構(gòu)相關(guān)的修改,尤其是它要求加表鎖,現(xiàn)在基本不使用了 。第二種是INPLACE算法,該算法不要求加鎖,因此很多DDL操作是不阻塞DML(Data ManipulationLanguage: 數(shù)據(jù)操縱語(yǔ)句)操作的,比如創(chuàng)建索引 。該算法具體的實(shí)現(xiàn)在存儲(chǔ)引擎層面完成,可以進(jìn)行更多的優(yōu)化 。實(shí)際上DDL語(yǔ)句還有一種INSTANT算法,但是它無(wú)法支持創(chuàng)建索引操作,這里不展開(kāi)介紹 。
對(duì)于INPLACE算法,在5.7版本之前,是采用索引記錄不斷地向建好的空索引插入的方式 。由于插入的數(shù)據(jù)的無(wú)序性,該方法導(dǎo)致了明顯的性能問(wèn)題和潛在的空間浪費(fèi) 。在5.7版本以后,MySQL優(yōu)化了建索引步驟,將其改進(jìn)為對(duì)已排序的索引記錄進(jìn)行自底向上批量插入并且緊湊拼裝的創(chuàng)建方式,如果有多個(gè)索引要?jiǎng)?chuàng)建,會(huì)單獨(dú)對(duì)每個(gè)索引執(zhí)行相同的算法 。新的算法會(huì)經(jīng)歷讀取數(shù)據(jù)、排序數(shù)據(jù)和創(chuàng)建索引這幾個(gè)主要步驟 。
總體而言,創(chuàng)建索引這類DDL操作,會(huì)比普通的DML等操作要費(fèi)時(shí),而該類DDL耗時(shí)會(huì)導(dǎo)致用戶在繼續(xù)動(dòng)態(tài)添加索引加速查詢的時(shí)候,需要等待很長(zhǎng)的時(shí)間,極大影響業(yè)務(wù);而且用戶的MySQL實(shí)例開(kāi)啟了Binlog復(fù)制,耗時(shí)的DDL操作容易引起備庫(kù)的長(zhǎng)時(shí)間落后 。
數(shù)據(jù)庫(kù)怎么加索引 如何加索引

文章插圖
MySQL的創(chuàng)建索引流程圖
云化場(chǎng)景下索引創(chuàng)建的問(wèn)題隨著越來(lái)越多用戶把數(shù)據(jù)托管在云服務(wù)上,以及用戶數(shù)據(jù)量的不斷增長(zhǎng),前述的動(dòng)態(tài)添加索引導(dǎo)致的問(wèn)題非常影響用戶體驗(yàn) 。同時(shí)客戶的單表數(shù)據(jù)逐漸達(dá)到幾TB甚至幾十TB,客戶對(duì)創(chuàng)建索引太慢所帶來(lái)的性能問(wèn)題的抱怨越來(lái)越多,尤其是創(chuàng)建索引周期如果太長(zhǎng),我們可能很難找到一段合適的業(yè)務(wù)低峰期來(lái)動(dòng)態(tài)創(chuàng)建索引,避免業(yè)務(wù)的波動(dòng) 。因此,如何在云服務(wù)環(huán)境下,解決客戶基于大量數(shù)據(jù)創(chuàng)建索引的性能問(wèn)題,成為云服務(wù)廠商的一個(gè)挑戰(zhàn) 。


以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!

「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助: