Mysql面试常见知识点总结(一)
一、Mysql事務相關
事務特點,包括原子性、一致性、隔離性、持久性。一句話表達就是邏輯上的一組操作,要么執(zhí)行,要不不執(zhí)行。
事務的隔離性包括讀取未提交、讀取已提交、可重復讀、串行化。這四種事務隔離性是按照從低到高的隔離級別。默認級別是可重復讀。
1、讀取未提交是指一個事務內可以讀取另一個事務內已修改但沒有commit提交的數(shù)據(jù)。
2、讀取已提交是指一個事務內可以讀取另一個事務內已提交的數(shù)據(jù)。可避免臟讀。
3、可重復讀是指一個事務內可以反復讀取另一個事務內某個字段的值,而不會有差異性。即對同一個字段進行多次讀操作,得到的結果是相同的。可避免臟讀、不可重復讀。
4、串行化就是多個事務之間完全獨立,按照順序執(zhí)行。可避免事務并行帶來的不利影響。可避免臟讀、不可重復讀、幻讀。
并發(fā)事務可能造成一些錯誤數(shù)據(jù),包括臟讀、不可重復讀、以及幻讀。可以提高事務的隔離性,來避免并發(fā)事務帶來的影響。
1、臟讀就是指一個事務內讀取另一個事務內已修改但未提交的數(shù)據(jù),從而產生錯誤。
2、不可重復讀,一個事務內讀取到另一個事務內對某一個字段的修改值。
3、幻讀,就是一個事務內讀取某些記錄,但是另一個事務內有新增或刪除了某些記錄,這個時候第一個事務再進行查詢操作,會增加或者減少了部分記錄。
二、Mysql引擎特點
mysql5.6版本后采用InnoDb引擎,支持表級鎖和行級鎖。并且支持事務。
三、Mysql設計表
1、采用合適的數(shù)據(jù)類型。比如Int、smallInt等占用不同的字節(jié)數(shù),根據(jù)實際使用場景采用合適的數(shù)據(jù)類型。
若不涉及到符號,則采用無符合數(shù)據(jù)類型。
日期數(shù)據(jù)不要采用字符類型,采用Date、DateTime、Time、TimeStamp等。DateTime占八個字節(jié),時間范圍大。TimeStamp時間范圍從1980-2040,帶有時區(qū)信息。
Ip設計成Int類型,而不采用字符類型
盡量不要有null、建立好主鍵。
2、建立合適的索引
建議在where、OrderBy、GroupBy等字段上選擇列作為索引。索引一般不超過五個,索引不是越多越好,過多的索引的情況下。若數(shù)據(jù)的變更使得索引維護的開銷增加,當然Mysql選擇索引的時間也會增加。
索引列的順序盡量選取區(qū)分度高的列,再就是列長度較短的放在前面。
區(qū)分度高的字段做索引,容易命中記錄。列長度較小的字段,容易減小IO開銷。
四、Sql查詢慢
1、檢查Sql是否規(guī)范,是否沒有建立索引或者說有索引但是由于Sql語句不規(guī)范而沒有走索引。
常見的不走索引而去全表查找的問題如使用Like “%%”、!=或者<>、或者對列采用函數(shù)轉換或者左側運算、或者在Where條件中使用Is null、Is not null或者使用In子查詢,將會放棄索引,而走整表查詢,從而降低效率。
2、大Sql的話,建議拆分成多個小Sql。一個Sql語句是單線程執(zhí)行。
3、若是數(shù)據(jù)量太大,則考慮讀寫分離、或者分區(qū)(垂直分區(qū)、水平分區(qū))、分庫等。
讀寫分離是比較經(jīng)典的做法,主數(shù)據(jù)庫做寫操作,多個從數(shù)據(jù)庫負責讀操作。
垂直分區(qū)就是把多個列拆開,可以按照操作頻繁的列作為一張表。
水平分區(qū)就是將一張表上的記錄分到多張表上去。
分庫則是物理上的分隔,分布式部署。
五、慢查詢排查
1、開啟慢查詢日志,分析查詢Sql耗時
2、采用Explain分析Sql執(zhí)行情況,是否命中索引等
感謝歪哥總結,參考博文地址:http://blog.waizaowang.com/java/19.html
總結
以上是生活随笔為你收集整理的Mysql面试常见知识点总结(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows2003使用WEB方式修改
- 下一篇: Android自定义抛出异常