面試準備 資料庫(持續更新)

2021-08-29 15:52:57 字數 1722 閱讀 9854

1、mysql分頁有什麼優化

2、悲觀鎖、樂觀鎖

悲觀鎖還是樂觀鎖,都是人們定義出來的概念,可以認為是一種思想。行鎖,表鎖,排他鎖,共享鎖等是資料庫的鎖機制

悲觀鎖:獲取鎖之後再執行操作,提交事務後釋放鎖,實現上使用資料庫提供的鎖機制適合資源競爭比較激烈,或者鎖代價小於回滾代價的場景

樂觀鎖:在事務提交的時候檢查原有資料是否發生修改,有衝突則回滾當前事務。相對於悲觀鎖,在對資料庫進行處理的時候,樂觀鎖並不會使用資料庫提供的鎖機制。一般的實現樂觀鎖的方式就是記錄資料版本或者時間戳

3、組合索引,最左原則

單列索引:即乙個索引只包含單個列,乙個表可以有多個單列索引,但這不是組合索引。不要試圖分別基於單個列建立多個單列索引(因為雖然有多個單列索引,但是mysql只能用到其中的那個它認為似乎最有效率的單列索引),但是有乙個index_merge優化,where條件是多個索引,但是又不存在這些索引組成的組合索引,索引歸併,可以求交集(and),也可以求並集(or)

組合索引:即乙個索包含多個列

最左原則:使用到組合索引,查詢條件必須從索引欄位的左側開始包含。

例如組合索引為(a,b,c),查詢條件為a,ab,abc,ac都可以使用到索引,其中abc完全使用到索引,a,ab,ac只使用到部分索引,即a的部分。bc無法使用到索引

剛開始以為組合索引的b+樹形式是,先按照a構建幾層索引,在按照b構建下面幾層索引,在按照c構建最底下的幾層索引。abc欄位在構建索引樹的時候全部都用上,最終到達葉子節點。

然後在知乎上,看到乙個另外的解釋,組合索引是將多個列合併成乙個索引值,比如a-b-c,然後定義乙個排序方式,然後對合併的索引值進行和單列索引一樣的索引樹構建。比如1-a-l,1-b-l,2-a-c,4-d-j。這樣子解釋也可以解釋上面的最左原則。

目前來看,我傾向於第三種儲存結構

mysql復合索引的底層資料結構? - nylon的回答 - 知乎

通過explain測試,如果存在a,b的單索引,abc組合索引,在實際情況中,where條件是ab的情況,有時候會走單索引,根據explain的結果,row的數值是一致的,可能在選擇索引的時候還會參考資料庫的資料量

4、mysql 的表鎖、行鎖

mysql innodb鎖介紹及不同sql語句分別加什麼樣的鎖

以下所說的都是鎖定讀或dml(insert/update/delete)語句的情形,且索引順序是遞增的:

5、mysql 效能優化

建立索引,join操作的字段建立索引,垂直分表,讀寫分離,explain檢視執行過程優化查詢sql,拆分大批量的insert和delete語句

6、mysql的索引分類:b+,hash;什麼情況用什麼索引

hash索引:雜湊索引資料並不是按照索引值順序儲存的,索引也就無法用於排序。雜湊索引也不支援部分索引列匹配查詢,因為雜湊索引始終是使用索引列的全部內容來計算雜湊值的。

7、事務的特性和隔離級別

acid:原子性,一致性(相關資料的修改要符合資料規則,保持一致性),隔離性(其他事務不能對正在修改資料做操作),永續性

隔離級別是通過mvcc進行控制,只控制讀操作,不控制寫操作。rr級別下的版本控制是在第乙個select操作的時候建立乙個快照,所以能保證每次讀到相同的資料。關於此二者的實驗說明,可以參考文章不可重複讀及幻讀區別內部有例項,說明,參考文章

資料庫 持續更新中

explain plan forselect from test select from table dbms xplan.display select b.uniqueness,a.index name,a.table name,a.column name from all ind columns...

資料庫優化(持續更新)

資料庫是程式的倉庫,也是程式中最脆弱的一部分,因為它的脆弱性和重要性,所以需要專門進行管理和優化。在如今的網路化的時代更加需要資料庫的靈活和快捷,乙個高效的資料庫能夠使程式執行效率更快,提高程式的執行效率。但往往對資料庫的設計達不到我們想要的效果,所以資料庫的優化顯得尤為重要。該系列文章正是考慮大資...

資料庫優化(持續更新中 )

1 合理使用索引 經常進行連線,但沒有指定為外來鍵的列上建立索引 在頻繁進行排序或分組 即進行group by或order by操作 的列上建立索引 在條件表示式中經常用到的不同值較多的列上建立檢索,在不同值少的列上不要建立索引 如性別只有兩種,不用索引 如果待排序的列有多個,可以在這些列上建立復合...