前段時(shí)間,公司一個(gè)新上線的網(wǎng)站出現(xiàn)頁(yè)面響應(yīng)速度緩慢的問(wèn)題, 一位負(fù)責(zé)這個(gè)項(xiàng)目的但并不是搞技術(shù)的妹子找到我,讓我想辦法提升網(wǎng)站的訪問(wèn)速度 ,因?yàn)橐呀?jīng)有很多用戶來(lái)投訴了。我第一反應(yīng)覺(jué)的是數(shù)據(jù)庫(kù)上的問(wèn)題,假裝思索了一下,擺著一副深沉炫酷的模樣說(shuō):“是不是數(shù)據(jù)庫(kù)查詢上出問(wèn)題了, 給表加上索引吧”,然后妹子來(lái)了一句:“現(xiàn)在我們網(wǎng)站訪問(wèn)量太大,加索引有可能導(dǎo)致寫(xiě)入數(shù)據(jù)時(shí)性能下降,影響用戶使用的”。當(dāng)時(shí)我就楞了一下, 有種強(qiáng)行裝逼被拆穿的感覺(jué),在自己的專業(yè)領(lǐng)域居然被非專業(yè)的同學(xué)教育, 面子上真有點(diǎn)掛不住。

其實(shí), 我說(shuō)這個(gè)例子并不是為展現(xiàn)我們公司的同事們專業(yè)能力的強(qiáng)大、做的產(chǎn)品棒、安全性高、性能牛逼, 連非技術(shù)的同事也懂得技術(shù)上的細(xì)節(jié)。事實(shí)上我只是想說(shuō)明,「數(shù)據(jù)庫(kù)」和「數(shù)據(jù)庫(kù)索引」這兩個(gè)東西是在服務(wù)器端開(kāi)發(fā)領(lǐng)域應(yīng)用最為廣泛的兩個(gè)概念,熟練使用數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)索引是開(kāi)發(fā)人員在行業(yè)內(nèi)生存的必備技能,而整天和技術(shù)人員打交道的非技術(shù)人員們,由于耳濡目染久了,自然也就能講個(gè)頭頭是道了。

使用索引很簡(jiǎn)單,只要能寫(xiě)創(chuàng)建表的語(yǔ)句,就肯定能寫(xiě)創(chuàng)建索引的語(yǔ)句,要知道這個(gè)世界上是不存在不會(huì)創(chuàng)建表的服務(wù)器端程序員的。然而, 會(huì)使用索引是一回事, 而深入理解索引原理又能恰到好處使用索引又是另一回事,這完全是兩個(gè)天差地別的境界(我自己也還沒(méi)有達(dá)到這層境界)。很大一部份程序員對(duì)索引的了解僅限于到“加索引能使查詢變快”這個(gè)概念為止。

  • 為什么要給表加上主鍵?

  • 為什么加索引后會(huì)使查詢變快?

  • 為什么加索引后會(huì)使寫(xiě)入、修改、刪除變慢?

  • 什么情況下要同時(shí)在兩個(gè)字段上建索引?

這些問(wèn)題他們可能不一定能說(shuō)出答案。知道這些問(wèn)題的答案有什么好處呢?如果開(kāi)發(fā)的應(yīng)用使用的數(shù)據(jù)庫(kù)表中只有1萬(wàn)條數(shù)據(jù),那么了解與不了解真的沒(méi)有差別, 然而, 如果開(kāi)發(fā)的應(yīng)用有幾百上千萬(wàn)甚至億級(jí)別的數(shù)據(jù),那么不深入了解索引的原理, 寫(xiě)出來(lái)程序就根本跑不動(dòng),就好比如果給貨車裝個(gè)轎車的引擎,這貨車還能拉的動(dòng)貨嗎?

接下來(lái)就講解一下上面提出的幾個(gè)問(wèn)題,希望對(duì)閱讀者有幫助。

網(wǎng)上很多講解索引的文章對(duì)索引的描述是這樣的「索引就像書(shū)的目錄, 通過(guò)書(shū)的目錄就準(zhǔn)確的定位到了書(shū)籍具體的內(nèi)容」,這句話描述的非常正確, 但就像脫了褲子放屁,說(shuō)了跟沒(méi)說(shuō)一樣,通過(guò)目錄查找書(shū)的內(nèi)容自然是要比一頁(yè)一頁(yè)的翻書(shū)找來(lái)的快,同樣使用的索引的人難到會(huì)不知道,通過(guò)索引定位到數(shù)據(jù)比直接一條一條的查詢來(lái)的快,不然他們?yōu)槭裁匆ㄋ饕?/span>

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式