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

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

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

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

  • 為什么加索引后會使查詢變快?

  • 為什么加索引后會使寫入、修改、刪除變慢?

  • 什么情況下要同時在兩個字段上建索引?

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

接下來就講解一下上面提出的幾個問題,希望對閱讀者有幫助。

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

網(wǎng)友評論