資料庫的大腦-最佳化器

xuexiaogang發表於2022-08-25

 可能這個比喻不是很恰當。但是不會差太多。前幾天和一個演算法美女博士談及她的專業,我說其實資料庫核心之一就是演算法。我在她面前班門弄斧的說了階乘和選擇度等。當然博士容忍了我的吹牛。其實我個人也這樣理解的,資料庫是數學和物理學的結合。一個SQL就是把高階語言翻譯成機器語言,最後在指定的地方讀寫值。如何讀寫其實很大程度取決於邏輯,我有時候看到一些待最佳化的SQL就是: 查一年資料可能是200萬(其實不大對吧)。 那麼如果一頁200行,那麼就是1萬頁。 有人一定強迫症要看看總頁數。(其實沒必要,請參考谷歌和百度)。也就是說返回這麼多,但是使用的人我想基本不會看1萬頁的,最多就看幾頁。 相當於做了滿漢全席,結果吃了兩口,全倒掉了。這是邏輯呀。有的時候為什麼SQL慢,邏輯錯了。

     資料庫的心臟是最佳化器(依賴統計資訊我們先不表)我幾年前聽說MySQL和PG的最佳化器有很多種演算法。一個是25種一個是50種。(誰25,誰50。我忘了,說誰少,誰不高興。兩邊都有朋友不得罪人了)。然後我聽恩墨老師說Oracle有250種最佳化演算法。以上資料都來自於幾年前。現在具體不知道了。所以有人說為什麼Oracle快,你可能不知道多少滿頭白髮的數學教授在那裡研究著這些。

    平時也在不少群裡看到,說某某國產太拉胯,Oracle、MySQL、PG上都能很快或者較快出結果的。結果在它上面出不來結果,甚至奔潰了。所以如果用有些提到的國產,就需要開發重寫所有邏輯,否則支援不了的。

   以前有個清華的碩士和我說,他們在2000年初,全班都被新浪、搜狐整班入職。那時候全國最好的人來做高併發的入口網站。那時的開發還要求邏輯和演算法,現在只有大廠還堅持著這個優良的傳統。

   “你別逼我,逼急了我什麼都做的出來。 ”     “是嗎?,那你把這道數學題給做做?”    人被逼急了還真不是什麼都做的出來,起碼數學就不是。

     有的資料庫比較好,其中一個方面就是這個。我看過有些看上去有點“噁心 ”的SQL,他還執行的這麼快。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2912087/,如需轉載,請註明出處,否則將追究法律責任。

相關文章