1. 程式人生 > 資料庫 >JAVA新手入門06~MYSQL提高篇2

JAVA新手入門06~MYSQL提高篇2

儘管上一篇的內容,對於初學者來說,已經算是稍微有點難度了,但是對於有一點工作經驗的開發人員來說,仍然算不上有難度,所以這一篇將從面試的角度,總結一下需要了解的知識點,這一篇將只列知識點,不給答案,或者給一個大致的方向。如果要面試的人,也可以試著回答以下問題。如果你現在不想深入研究MYSQL,畢竟人的精力都是有限的,也可以把以下內容,放入到你的TODO LIST中去,以後再慢慢研究,我的建議是,每個程式設計的人,都應該有一個自己程式設計的筆記本,例如微軟的ONE NOTE,印象筆記、蘋果的備忘錄(我正在用),然後有一個筆記,是專門存放要做的事情的,在任何時候,任何地點,遇到了不會的東西,立即放入TODO LIST中去。

這也是一種程式設計思想,你想一下,訊息佇列(MQ)是不是就是這個思路,很多地方都是這個思路,這裡就不一一列舉了。

1、索引篇

  • mysql哪些索引會命中,哪些不會命中?
  • 怎麼檢視mysql索引是否命中? explain檢視執行計劃
  • 聯合索引哪些情況索引會命中? 哪些不會呢?
  • mysql底層索引是什麼資料結構? B+樹
  • 聚簇索引和覆蓋索引有什麼區別?
  • mysql索引為什麼快?
  • mysql索引為什麼用B+,而不是B樹?
  • 建了索引一定就會快嗎? 不是
  • 建了索引,且索引命中了,就一定會快嗎?不是
  • varchar型別的列有100個長度,適合建索引嗎? 如果不適合,怎麼解決?
  • 哪些列適合建索引? 區分度大的列適合,像ID
  • 哪些列不適合建索引? SEX這種 text 長度大的varchar
  • varchar和char有什麼區別?
  • 索引有什麼壞處? 新增和更新、刪除慢了點,佔用磁碟空間大了點等等
  • 什麼是慢SQL?怎麼檢視MYSQL的慢SQL?
  • 做過哪些MYSQL的查詢優化?

2、事務篇

之前的內容沒有講解事務,但是高階開發人員是必須精通事物的,本篇不打算講解事務,只給出幾個問題,網上的資料也很多,可以自己去找一下

  • 什麼是事務?
  • 事務的4個特性是什麼? ACID
  • 分別解釋ACID是什麼意思?
  • 事務的隔離級別有幾種?MYSQL預設是什麼級別?
  • 什麼是髒讀、不可重複讀、幻讀?
  • MVCC和事務隔離級別的關係?
  • 事務的傳播機制是什麼?
  • @Transactional哪些情況會失效?

3、鎖篇

  • 什麼是間隙鎖?
  • 什麼是行鎖?
  • 死鎖是怎麼產生的?
  • 怎麼避免死鎖?
  • 事務和鎖是什麼關係?

4、安全

  • 什麼是SQL注入?
  • 怎麼避免SQL注入?
  • mybatis中#和$的區別

5、其它

  • 電商的訂單號可以用自增ID嗎?
  • (延伸)怎麼設計1個分散式的自增ID,要求不能重複,高效能,高可用。
  • innerDB的自增ID,斷電重啟之後會怎麼樣?
  • 資料庫欄位設計有哪些經驗?
  • timestamp和datetime有什麼區別?
  • MYSQL支援模糊查詢嗎?
  • 看過MYSQL的慢日誌嗎?
  • 資料庫連線池用的哪個?
  • 為什麼要用連線池?
  • 連線池各個引數設定的都是多少?

如果想更深入的學習MYSQL,可以看一下<高效能MYSQL>這本書,講的會更細,對於MYSQL的執行流程、索引、快取、調優等都有特別深入的講解,遠遠比這篇文章講的要多的多。

全文完。

關注我的部落格,獲取更多Java程式設計知識: