助你進(jìn)大廠,這些MySQL索引底層知識(shí)你是必須知道的盗忱。

來(lái)自公眾號(hào):非科班的科班
作者:黎杜

前言

上一篇總結(jié)了Mysql的鎖機(jī)制酱床,通過(guò)讀者的反映和閱讀量顯示,總體還是不錯(cuò)的趟佃,感興趣的可以閱讀一下[大廠面試官必問(wèn)的Mysql鎖機(jī)制扇谣。

寫(xiě)了那么多的Mysql文章昧捷,有讀者問(wèn)我是不是dba,工作真的需要掌握那么深嗎罐寨。我想說(shuō)的是:我是一名Java全職開(kāi)發(fā)人員不是dba靡挥。

假如你只滿(mǎn)足于日常的crud,你可以放棄這些底層的知識(shí)衩茸,可以不必學(xué)的那么深芹血,若是你想往高處走贮泞,這些底層的知識(shí)楞慈,是你必備的。

話(huà)不多說(shuō)啃擦,這一篇總結(jié)是講解Mysql的索引囊蓝,之前寫(xiě)過(guò)一篇關(guān)于索引的,主要是講解索引的底層的數(shù)據(jù)結(jié)構(gòu)B+tree[為了把mysql的索引底層原理講清楚令蛉,我把計(jì)算機(jī)翻了個(gè)底朝天]聚霜。

這一篇是講解Mysql中做使用到的「索引的種類(lèi)」「索引正確使用的原則」珠叔、「怎么優(yōu)化索引」蝎宇、「以及兩種存儲(chǔ)引擎InnoDB和MyISAM索引的數(shù)據(jù)布局原理」

索引種類(lèi)

在說(shuō)索引之前祷安,我們先來(lái)說(shuō)一說(shuō)什么是索引呢姥芥?對(duì)于索引個(gè)人的理解就是,索引是一種加快查詢(xún)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)汇鞭。

所以凉唐,索引就是一種數(shù)據(jù)結(jié)構(gòu),作用就是發(fā)揮這種數(shù)據(jù)結(jié)構(gòu)的作用霍骄,加快查詢(xún)的效率台囱,例如:InnoDB存儲(chǔ)引擎中使用的是就是B+tree這種數(shù)據(jù)結(jié)構(gòu)來(lái)組織索引。

Mysql中索引的種類(lèi)也不是很多读整,不同類(lèi)型的索引有不同的作用簿训,索引的作用相互之間也存在交叉關(guān)系,Mysql中索引主要分為以下幾類(lèi):

  1. 「主鍵索引」PRIMARY KEY):主鍵索引一般都是在創(chuàng)建表的時(shí)候指定米间,「一個(gè)表只有一個(gè)主鍵索引」强品,特點(diǎn)是「唯一、非空」车伞。
  2. 「唯一索引」UNIQUE):唯一索引具有的特點(diǎn)就是唯一性择懂,可以在創(chuàng)建表的時(shí)候指定,也可以在創(chuàng)建表后創(chuàng)建另玖。
  3. 「普通索引」INDEX):普通索引唯一的作用就是加快查詢(xún)困曙。
  4. 「組合索引」INDEX):組合索引是創(chuàng)建一個(gè)「多個(gè)字段的索引」表伦,這個(gè)概念是相對(duì)于上上面的單列索引而言,組合索引查詢(xún)遵循「最左前綴原則」慷丽。
  5. 「全文索引」FULLTEXT):全文索引是針對(duì)一些大的「文本字段」創(chuàng)建的索引蹦哼,也稱(chēng)為「全文檢索」
  6. 「聚簇索引」「非聚簇索引」:聚簇索引和非聚簇索引的概念比上面的概念要大要糊,屬于包含和被包含的關(guān)系纲熏。例如:InnoDB中主鍵索引使用的就是聚簇索引。

若是你想查看一個(gè)表的所有索引锄俄,可以執(zhí)行下面的sql來(lái)查看:

show index from 表名

例如局劲,查看我自己的測(cè)試表里面的索引,如下圖所示奶赠,Key_name表示索引的名字鱼填,Column_name表示索引的字段。

image

上面大概的說(shuō)了主要索引的概念毅戈,下面詳細(xì)的介紹一下這幾大索引的特點(diǎn)和使用苹丸。

主鍵索引

主鍵索引在InnoDB存儲(chǔ)引擎中是最常見(jiàn)的索引類(lèi)型,一個(gè)表都會(huì)有一個(gè)主鍵索引苇经,它索引的字段不允許為空值赘理,并且唯一。

一般是在創(chuàng)建表的時(shí)候扇单,可以通過(guò)RIMARY KEY指定主鍵索引商模,在InnoDB存儲(chǔ)引擎中,若是創(chuàng)建表的時(shí)候沒(méi)有主觀創(chuàng)建主鍵索引令花,Mysql就會(huì)看表中是否有唯一索引阻桅,有,就會(huì)指定「非空的唯一索引」為主鍵索引兼都;

沒(méi)有嫂沉,就會(huì)默認(rèn)生成一個(gè)6byte空間的自動(dòng)增長(zhǎng)主鍵作為主鍵索引,可以通過(guò)select _rowid from 表名查詢(xún)的是對(duì)應(yīng)的主鍵值.扮碧。

MyISAM儲(chǔ)存引擎是可以不存在主鍵索引趟章,MyISAM和InnoDB儲(chǔ)存數(shù)據(jù)的結(jié)構(gòu)方式還是有明顯的區(qū)別,這個(gè)后面篇章會(huì)詳細(xì)講解慎王。

唯一索引

唯一索引與主鍵索引的區(qū)別就是蚓土,唯一索引允許為空,若是在組合索引中赖淤,只要?jiǎng)?chuàng)建的列值是唯一的

唯一索引在實(shí)際中更多的是用來(lái)保證數(shù)據(jù)的唯一性蜀漆,假如你僅僅要數(shù)據(jù)能夠快速查詢(xún),你也可以使用普通索引咱旱,所以唯一索引重在體現(xiàn)它的唯一性确丢。

實(shí)際的業(yè)務(wù)場(chǎng)景绷耍,有些庫(kù)表字段要求唯一,就可以使用唯一索引鲜侥,創(chuàng)建唯一索引的方式有三種褂始。

(1)一個(gè)是在創(chuàng)建表的時(shí)候指定,如下sql:

CREATE TABLE user( 
 id INT PRIMARY KEY NOT NULL, 
 name VARCHAR(16) NOT NULL, 
 UNIQUE unique_name (name(10)) 
);

(2)也可以在表創(chuàng)建后創(chuàng)建描函,如下sql:

CREATE UNIQUE INDEX unique_name ON user(name(10))崎苗;

(3)通過(guò)修改表結(jié)構(gòu)創(chuàng)建,如下sql:

ALTER user ADD UNIQUE unique_name ON (name(10))

這里有一個(gè)細(xì)節(jié)要注意的是創(chuàng)建的name字段舀寓,指定的長(zhǎng)度是16字符胆数,而創(chuàng)建的索引的長(zhǎng)度制定的是10字符,因?yàn)橐矝](méi)有人的名字長(zhǎng)度會(huì)超過(guò)10個(gè)字符基公,所以減少索引長(zhǎng)度幅慌,能夠減少索引所占的空間的大小宋欺。

普通索引

普通索引的唯一作用就是加快數(shù)據(jù)的查詢(xún)轰豆,一般對(duì)查詢(xún)語(yǔ)句WHEREORDER BY后面的字段創(chuàng)建普通索引。

創(chuàng)建普通索引的方式也有三種齿诞,基本和創(chuàng)建唯一索引的方式一樣酸休,只是把關(guān)鍵字UNIQUE換成INDEX,如下所示:

// 創(chuàng)建表的時(shí)候創(chuàng)建
CREATE TABLE user( 
 id INT PRIMARY KEY NOT NULL, 
 name VARCHAR(16) NOT NULL, 
 INDEX index_name (name(10)) 
);
// 創(chuàng)建表后創(chuàng)建
CREATE INDEX INDEX index_name ON user(name(10))祷杈;
// 修改表結(jié)構(gòu)創(chuàng)建
ALTER user ADD INDEX index_name ON (name(10))

若是想刪除索引斑司,可以通過(guò)執(zhí)行下面的sql進(jìn)行刪除索引:

DROP INDEX index_name ON user;

組合索引

組合索引即用多個(gè)字段創(chuàng)建一個(gè)索引,組合索引能夠避免「回表查詢(xún)」但汞,相對(duì)于多字段的單列索引宿刮,組合索引的查詢(xún)效率更高。

創(chuàng)建組合索引(聯(lián)合索引)的方式和上面創(chuàng)建普通索引的方式一樣私蕾,只不過(guò)字段的數(shù)目多了僵缺,如下sql創(chuàng)建:

// 其它方式和上面的一樣,這里就只列舉修改表結(jié)構(gòu)的方式創(chuàng)建
ALTER TABLE employee ADD INDEX name_age_sex (name(10),age,sex);

回表查詢(xún)

什么是回表查詢(xún)呢踩叭?回表查詢(xún)簡(jiǎn)單來(lái)說(shuō)「通過(guò)二級(jí)索引查詢(xún)數(shù)據(jù)磕潮,得不到完整的數(shù)據(jù)行,需要再次查詢(xún)主鍵索引來(lái)獲得數(shù)據(jù)行」容贝。

InnoDB存儲(chǔ)引擎中自脯,索引分為 「聚簇索引」「二級(jí)索引」,主鍵索引就是聚簇索引斤富,其它的索引為二級(jí)索引膏潮。

聚簇索引中的葉子節(jié)點(diǎn)保存著完整的數(shù)據(jù)行,而二級(jí)索引的葉子節(jié)點(diǎn)并不是保存完整的數(shù)據(jù)行满力。

上面提到InnoDB表是一定要有主鍵索引的焕参,雖然索引占據(jù)空間屋谭,但是索引符合二分查找的算法,查找數(shù)據(jù)非常的快龟糕。

假設(shè)還是上面的employee表桐磁,里面有主鍵索引id,和普通的索引name讲岁,那么在InnoDB中就會(huì)存在兩棵B+Tree我擂,一棵是主鍵索引樹(shù):

image

在主鍵索引樹(shù)中的葉子節(jié)點(diǎn)存儲(chǔ)的是完整的數(shù)據(jù)行,另外一棵是name字段的二級(jí)索引樹(shù)缓艳,如下圖所示:

image

倘若你執(zhí)行這條sql:select name, age, sex from employee where id ='as';就會(huì)先執(zhí)行二級(jí)索引的查詢(xún)校摩,當(dāng)查詢(xún)name='as'時(shí),得到主鍵為50阶淘,再根據(jù)主鍵查詢(xún)主鍵索引樹(shù)衙吩,得到完整的數(shù)據(jù)行,具體的執(zhí)行流程如下:

image

這個(gè)就是回表查詢(xún)溪窒,回表查詢(xún)會(huì)查詢(xún)兩次坤塞,這樣就會(huì)降低查詢(xún)的效率,為了避免回表查詢(xún)澈蚌,只查詢(xún)一次就能得到完整的數(shù)據(jù)呢摹芙?

索引覆蓋

常見(jiàn)的方式就是「建立組合索引(聯(lián)合索引)「進(jìn)行」索引覆蓋」,什么是索引覆蓋呢宛瞄?索引覆蓋就是「索引的葉子節(jié)點(diǎn)已經(jīng)包含了查詢(xún)的數(shù)據(jù)浮禾,沒(méi)必要再回表進(jìn)行查詢(xún)》莺梗」

假如我還是執(zhí)行如下sql:select name, age, sex from employee where name ='as';因?yàn)槠胀ㄋ饕挥衝ame字段才建立了索引盈电,這必然會(huì)導(dǎo)致回表查詢(xún)。

為了提高查詢(xún)效率杯活,就(name)「單列索引升級(jí)為聯(lián)合索引」(name, age, sex)就不同了匆帚。

因?yàn)榻⒌穆?lián)合索引,在二級(jí)節(jié)點(diǎn)的葉子階段就會(huì)同時(shí)存在name, age, sex三個(gè)的值轩猩,一次性就會(huì)獲得所需要的數(shù)據(jù)卷扮,這樣就避免了回表,但是所有的方案都不是完美的均践。

若是這個(gè)聯(lián)合索引哪一天某一個(gè)數(shù)據(jù)行的name值改變了或者age改變了晤锹,我就需要同時(shí)維護(hù)主鍵索引和聯(lián)合索引兩棵樹(shù),這樣的維護(hù)成本就高了彤委,性能開(kāi)銷(xiāo)也大了鞭铆。

相比之前數(shù)據(jù)的改變,我只需要維護(hù)主鍵索引即可,聯(lián)合索引的創(chuàng)建就導(dǎo)致了需要同時(shí)維護(hù)兩棵樹(shù)车遂,這樣就會(huì)影響插入封断、更新數(shù)據(jù)的操作,所以并沒(méi)有哪種方案是完美的舶担。

最左前綴原則

我們知道單列索引是按照索引列有序性的進(jìn)行組織B+Tree結(jié)構(gòu)的坡疼,聯(lián)合索引又是怎么組織B+Tree呢?

聯(lián)合索引其實(shí)也是按照創(chuàng)建索引的時(shí)候衣陶,最左邊的進(jìn)行最開(kāi)始的排序柄瑰,也就是「最左前綴原則」,比如一個(gè)表中有如下數(shù)據(jù):

name age sex
ad 23
bc 21
bc 24
bc 25
de 21

如上圖所示剪况,對(duì)于聯(lián)合索引中name字段是放在最前面的教沾,所以name是完全有序的,但是age字段就不是有序的译断,只有當(dāng)name相同授翻,例如:name='bc'此時(shí)age字段的索引排序才是完全有序的。

所以你會(huì)發(fā)現(xiàn)孙咪,在聯(lián)合索引中你只有使用以下的規(guī)則的方式查詢(xún)才會(huì)使用到索引:

  1. name,age,sex
  2. name,age
  3. name

因?yàn)镸ysql的底層有查詢(xún)優(yōu)化器堪唐,會(huì)判斷sql執(zhí)行的時(shí)候若是使用全表掃描的效率比使用索引的效率更高,就會(huì)使用全表掃描该贾。

假如羔杨,我查詢(xún)的時(shí)候使用age>=23,sex='男';兩個(gè)字段作為查詢(xún)條件,但是沒(méi)有使用name字段杨蛋,因?yàn)樵趎ame不知情的條件下,對(duì)于age是無(wú)序的理澎。

對(duì)于age>=23條件可能在很多的name不同中都有符合條件的出現(xiàn)逞力,所以就沒(méi)有辦法使用索引,這也是索引實(shí)現(xiàn)的原因糠爬,一定要遵循「查找有序寇荧,充分的利用索引的有序性」

假如你是分別在name执隧,age揩抡,sex三個(gè)字段中分別建立三個(gè)單列索引,就相當(dāng)于建立三顆索引樹(shù)镀琉,那么它的查詢(xún)效率峦嗤,比我們使用一棵索引樹(shù)查詢(xún)效率就可想而知了。

有一種情況即使使用到了最左邊的name字段也不會(huì)使用索引屋摔,例如:WHERE name like '%d%'烁设;這種like條件的模糊查詢(xún)是會(huì)使索引失效。

我們可以這樣理解钓试,「查詢(xún)字符串也是遵循最左前綴原則的」装黑,字符串的查詢(xún)是對(duì)字符串里面的字符一個(gè)一個(gè)的匹配副瀑,「若是字符串最左邊為%表示一個(gè)不確定的字符串,那么是沒(méi)辦法利用到索引的有序性」恋谭。

但是若是修改為 :WHERE name like 'd%'糠睡;就可以使用索引,因?yàn)樽钭筮叺淖址谴_定的疚颊,這種稱(chēng)為「匹配列前綴」铜幽。

實(shí)際業(yè)務(wù)場(chǎng)景中聯(lián)合索引的創(chuàng)建,「我們應(yīng)該把識(shí)別度比較高的字段放在前面串稀,提高索引的命中率除抛,充分的利用索引」

索引下推

Mysql5.6版本提出了索引下推的原則母截,「用于查詢(xún)優(yōu)化到忽,主要是用于like關(guān)鍵字的查詢(xún)的優(yōu)化」,什么是索引下推呢清寇?

下面通過(guò)演示來(lái)說(shuō)明一下他的概念喘漏,還是利用原來(lái)的employee測(cè)試表,假如我要執(zhí)行下面的sql進(jìn)行查詢(xún):SELECT * from user where name like '張%' and age=40华烟;

假如沒(méi)有索引下推翩迈,執(zhí)行的過(guò)程如下圖所示:

image

查詢(xún)會(huì)直接忽略age字段,將name查詢(xún)的張開(kāi)頭的id=5盔夜、id=7的結(jié)果返回給Mysql服務(wù)器负饲,再執(zhí)行兩次的回表查詢(xún)。

若是上面的查詢(xún)操作使用了索引下推喂链,執(zhí)行的過(guò)程如下:

image

Mysql會(huì)將查詢(xún)條件age=40的查詢(xún)條件傳遞給存儲(chǔ)引擎返十,再次過(guò)濾掉age=50的數(shù)據(jù)行,這樣回表的次數(shù)就變?yōu)榱艘淮瓮治ⅲ岣吡瞬樵?xún)效率洞坑。

總結(jié)起來(lái)索引下推就是在執(zhí)行sql查詢(xún)的時(shí)候,會(huì)將一部分的索引列的判斷條件傳遞給存儲(chǔ)引擎蝇率,由存儲(chǔ)引擎通過(guò)判斷是否符合條件迟杂,只有符合條件的數(shù)據(jù)才會(huì)返回給Mysql服務(wù)器。

全文索引

全文索引也稱(chēng)為全文檢索本慕,可以通過(guò)以下sql建立全文索引:ALTER TABLE employee ADD FULLTEXT fulltext_name(name);或者CREATE INDEX的方式創(chuàng)建排拷。

全文索引主要是針對(duì)CHARVARCHARTEXT這種文本類(lèi)的字段有效间狂,有人說(shuō)不也可以使用like關(guān)鍵字來(lái)查詢(xún)文本嗎攻泼。

普通索引(單列索引)的查詢(xún)只能加快字段內(nèi)容中最前面的字符串的檢索,若是對(duì)于多個(gè)單詞組成文本的查詢(xún)普通索引就無(wú)能為力了。

索引一經(jīng)創(chuàng)建就沒(méi)有辦法修改忙菠,若是想要修改索引何鸡,必須重建,可以使用以下sql來(lái)刪除索引:DROP INDEX fulltext_name ON employee;

聚簇索引和非聚簇索引

聚簇索引和非聚簇索引是相對(duì)于存儲(chǔ)引擎的概念牛欢,范圍比較大骡男,包含上面所提到的索引類(lèi)型。

「聚簇索引就是葉子節(jié)點(diǎn)中存儲(chǔ)的就是完整的行數(shù)據(jù)傍睹,索引和數(shù)據(jù)存儲(chǔ)在一起隔盛;而非聚簇索引的索引文件和數(shù)據(jù)文件是分開(kāi)的,所以查詢(xún)數(shù)據(jù)會(huì)多一次查詢(xún)」拾稳。

因此聚簇索引的查詢(xún)速度會(huì)快于非聚簇索引的查詢(xún)速度吮炕,在Mysql的存儲(chǔ)引擎中,「InnoDB支持聚簇索引访得,MyISAM不支持聚簇索引龙亲,MyISAM支持非聚簇索引」

聚簇索引

下面我們來(lái)看看InnoDB中的聚簇索引悍抑,前面說(shuō)到InnoDB都會(huì)有一個(gè)主鍵鳄炉,該主鍵就是用于支持聚簇索引,聚簇索引結(jié)構(gòu)圖搜骡,大致如下圖所示:

image

InnoDB中適用于最好的主鍵選擇就是給出一個(gè)AUTO_INCREMENT的列作為自增的主鍵拂盯,有的人可能會(huì)使用UUID作為隨機(jī)主鍵。

因?yàn)樗饕S持有序性记靡,若是使用隨機(jī)的主鍵谈竿,主鍵的插入需要尋找合適的位置進(jìn)行放置,這樣維護(hù)主鍵索引樹(shù)的成本就會(huì)變得更高簸呈。

相反的榕订,自增主鍵,主鍵都是自增變大蜕便,在維護(hù)主鍵索引樹(shù)的成本就會(huì)變得更小,隨意應(yīng)該盡量避免隨機(jī)主鍵贩幻。

非聚簇索引

MyISAM使用的是非聚簇索引轿腺,新插入數(shù)據(jù)的時(shí)候,會(huì)按順序的寫(xiě)入的磁盤(pán)中丛楚,并且給每一行數(shù)據(jù)標(biāo)記一個(gè)行號(hào)族壳,從小逐漸增大。

image

當(dāng)MyISAM創(chuàng)建主鍵索引的時(shí)候趣些,形成的主鍵索引樹(shù)的結(jié)構(gòu)圖如下圖所示:

image

在主鍵索引中仿荆,數(shù)據(jù)也是非空且唯一,主鍵索引樹(shù)中存儲(chǔ)的是數(shù)據(jù)行的行號(hào),當(dāng)查詢(xún)數(shù)據(jù)的時(shí)候使用主鍵索引查詢(xún)需要查詢(xún)到行號(hào)拢操,然后通過(guò)行號(hào)獲取數(shù)據(jù)锦亦。

非主鍵索引和主鍵索引一樣葉子節(jié)點(diǎn)也是存儲(chǔ)著行號(hào),唯一的區(qū)別就是非主鍵索引不要求非空令境、唯一杠园。

我們可以通對(duì)比圖來(lái)對(duì)比一下「InnoDB(聚簇索引)」「MyISAM(非聚簇索引)」 的索引數(shù)據(jù)布局,如下圖所示:

image

說(shuō)到這里相信應(yīng)該大家對(duì)于「InnoDB(聚簇索引)」「MyISAM(非聚簇索引)」 有了非常清晰的認(rèn)識(shí)和理解舔庶,下面是來(lái)說(shuō)一說(shuō)索引的優(yōu)化抛蚁,這個(gè)也是和我們?nèi)粘i_(kāi)發(fā)最密切相關(guān)的。

索引原則和優(yōu)化

要正確的使用索引惕橙,就要正確的創(chuàng)建索引瞧甩,用索引正確的查詢(xún),不要使索引失效弥鹦,因此索引的設(shè)計(jì)和優(yōu)化的原則應(yīng)該遵循下面的幾個(gè)原則:

  1. 索引列不要在表達(dá)式中出現(xiàn)肚逸,這樣會(huì)導(dǎo)致索引失效。如:「SELECT ...... WHERE id+1=5」;
  2. 索引列不要作為函數(shù)的參數(shù)使用惶凝。
  3. 索引列盡量不要使用like關(guān)鍵字吼虎。如:「SELECT ...... WHERE name like '%d%'」;
  4. 數(shù)字型的索引列不要當(dāng)作字符串類(lèi)型進(jìn)行條件查詢(xún)。如:「SELECT ...... WHERE id = '35'」;
  5. 盡量不要在條件NOT IN苍鲜、<>思灰、!= 中使用索引。
  6. 在索引列的字段中不要出現(xiàn)NULL值混滔,NULL值會(huì)使索引失效洒疚,可以用特殊的字符比如空字符串' '或者0來(lái)代替NULL值。
  7. 聯(lián)合索引的查詢(xún)應(yīng)該遵循最左前綴原則坯屿。
  8. 一般對(duì)于區(qū)別性比較大的字段建立索引油湖,在聯(lián)合索引中區(qū)別性比較大(識(shí)別度比較高)放在最前面,提高索引的命中率领跛。
  9. 索引的大小要適度乏德,不易過(guò)大,避免索引的冗余吠昭。

總結(jié)

索引是我們工作經(jīng)常會(huì)使用到的數(shù)據(jù)查詢(xún)方式喊括,正確的使用索引可以大大提高查詢(xún)的效率。

  1. 一方面索引減少了索引服務(wù)器需要掃描的數(shù)據(jù)行的數(shù)量矢棚,將原來(lái)的全表掃描郑什,使用特定的數(shù)據(jù)結(jié)構(gòu),能夠快速的定位數(shù)據(jù)行蒲肋。
  2. 另一方面使用有序的索引蘑拯,避免了排序钝满,將原來(lái)的隨機(jī)的IO操作,變成了順序的IO操作申窘,執(zhí)行有序弯蚜。

但是索引也不是十全十美的,也有自己的缺點(diǎn)偶洋,不正確的使用索引熟吏,將會(huì)導(dǎo)致索引大量的占據(jù)空間,索引并非是越多越好玄窝,索引文件會(huì)越發(fā)的膨脹牵寺,這樣嚴(yán)重的影響查詢(xún)的性能。

對(duì)于插入恩脂、更新帽氓、刪除數(shù)據(jù),除了維護(hù)數(shù)據(jù)以外俩块,還要維護(hù)索引文件黎休,這樣也會(huì)影響這些操作的性能,但是對(duì)于查詢(xún)的頻率遠(yuǎn)高于更新和插入數(shù)據(jù)的業(yè)務(wù)場(chǎng)景玉凯,索引是再適合不過(guò)了势腮。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市漫仆,隨后出現(xiàn)的幾起案子捎拯,更是在濱河造成了極大的恐慌,老刑警劉巖盲厌,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件署照,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吗浩,警方通過(guò)查閱死者的電腦和手機(jī)建芙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)懂扼,“玉大人禁荸,你說(shuō)我怎么就攤上這事》” “怎么了屡限?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)炕倘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)翰撑,這世上最難降的妖魔是什么罩旋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任啊央,我火速辦了婚禮,結(jié)果婚禮上涨醋,老公的妹妹穿的比我還像新娘瓜饥。我一直安慰自己,他們只是感情好浴骂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布乓土。 她就那樣靜靜地躺著,像睡著了一般溯警。 火紅的嫁衣襯著肌膚如雪趣苏。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天梯轻,我揣著相機(jī)與錄音食磕,去河邊找鬼。 笑死喳挑,一個(gè)胖子當(dāng)著我的面吹牛彬伦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伊诵,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼单绑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了曹宴?” 一聲冷哼從身側(cè)響起搂橙,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浙炼,沒(méi)想到半個(gè)月后份氧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弯屈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年蜗帜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片资厉。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡厅缺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宴偿,到底是詐尸還是另有隱情湘捎,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布窄刘,位于F島的核電站窥妇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏娩践。R本人自食惡果不足惜活翩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一烹骨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧材泄,春花似錦沮焕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至旦事,卻和暖如春魁巩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背族檬。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工歪赢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人单料。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓埋凯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親扫尖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子白对,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容