浅谈数据库性能优化
淺談數(shù)據(jù)庫性能優(yōu)化
1.truncate、delete、drop的區(qū)別
truncate和delete只能刪除數(shù)據(jù),不刪除表的結(jié)構(gòu)。drop語句將刪除表的結(jié)構(gòu),包括被依賴的約束(constrain)、觸發(fā)器(trigger)、索引(index);依賴于該表的的存過程/函數(shù)將保留,但是處于invalid狀態(tài)
- truncate在各種表上,無論是大的還是小的,都非常快。
- 如果執(zhí)行roll back命令,delete將會被撤銷,而truncate則不會被撤銷
- truncate不能進行回滾操作
- truncate不觸發(fā)任何delete觸發(fā)器
- 當(dāng)表被truncate后,這個表和索引占用的空間會恢復(fù)到初始大小,而delete操作不會減少表或索引所占用的空間
- 不能truncate一個帶有外鍵的表,如果要刪除首先要取消外鍵,然后再刪除
- delete語句執(zhí)行刪除的過程是每次從表里刪除一行并且將該行的刪除操作作為事務(wù)記錄再日志中保存,以便進行回滾操作
小結(jié):
truncate table一次性從表中刪除所有的數(shù)據(jù)頁,不把單獨的刪除操作記錄寫入日志保存,刪除行是不能恢復(fù)的。并且在刪除的過程中不會激活與表有關(guān)的刪除觸發(fā)器,執(zhí)行速度快。
delete語句可以通過where對要刪除的記錄進行選擇。而使用truncate table將刪除表中所有的記錄。因此,delete語句更加靈活。如果delete不加where子句,delete可以返回被刪除的記錄數(shù),而truncate table返回的是0.
2.Hibernate和Mybatis的區(qū)別
2.1簡介
- Hibernate框架是一個開源的對象關(guān)系映射框架,對JDBC進行輕量級的對象封裝,建立對象與數(shù)據(jù)庫表的映射,是一個全自動、完全面向?qū)ο蟮某志脤涌蚣堋?/li>
- Mybatis是一個開源對象關(guān)系映射框架,(原名ibatis,2010年Google接管后更名),是一個半自動化的持久層框架
2.2區(qū)別
- 開發(fā)方面
- Hibernate在開發(fā)中,sql語句已經(jīng)被封裝,直接可以使用,加快系統(tǒng)的開發(fā)
- Mybatis屬于半自動化,sql需要手工完成,稍顯繁瑣
- SQL優(yōu)化
- Hibernate自動生成sql,有些語句較為繁瑣,比較消耗性能
- Mybatis手寫sql,可以避免不需要的查詢,提高系統(tǒng)性能
- 對象管理比對
- Hibernate是完整的對象-關(guān)系映射的框架,開發(fā)過程中無需關(guān)注底層實現(xiàn),只需管理對象即可。
- Mybatis需要自行管理映射關(guān)系
- 緩存方面
- 相同點:Hibernate和Mybatis的二級緩存除了采用系統(tǒng)默認(rèn)的緩存機制外,可以實現(xiàn)第三方緩存方案
- 不同點:Hibernate的二級緩存配置在Session Factory生成的配置文件進行詳細(xì)配置。Mybatis的二級緩存配置都是在每個具體的表-對象中進行詳細(xì)配置
2.3Hibernate優(yōu)勢
- Hibernate的DAO層開發(fā)比Mybatis簡單,Mybatis需要維護SQL和結(jié)果映射
- Hibernate在對象的維護和緩存要比Mybatis,增刪改查對象維護方便
- Hibernate數(shù)據(jù)庫移植性好,Mybatis的數(shù)據(jù)庫移植性不好,不同數(shù)據(jù)庫需要寫不同的Sql
- Hibernate有更好的二級緩存機制,可以使用第三方緩存,Mybatis本身提供的緩存機制不佳
2.4Mybatis優(yōu)勢
- Mybatis可以進行更為細(xì)致的Sql優(yōu)化,可以減少查詢字段
- Mybatis容易掌握,而Hibernate門檻較高
小結(jié)
Mybatis:小巧、方便、高效、簡單、直接、半自動
Hibernate:強大、方便、高效、復(fù)雜間接、全自動化
3.數(shù)據(jù)庫索引
數(shù)據(jù)庫索引是數(shù)據(jù)管理系統(tǒng)中一個排序的數(shù)據(jù)結(jié)構(gòu),以協(xié)助快速查詢、更新數(shù)據(jù)庫表中數(shù)據(jù)。
- 平衡二叉樹:左右子樹深度差的絕對值不超過1,通過左旋或右旋調(diào)整AVL樹的平衡
- B Tree 能解決的問題,B+Tree都能解決
- 掃庫、掃表能力更強
- 磁盤讀寫能力更強、排序能力更強,效率更加穩(wěn)定
- 主鍵索引:存儲索引和數(shù)據(jù)
- 輔助索引:存儲索引和主鍵值
總結(jié)
- 上一篇: 20分钟教你手写Sping MVC
- 下一篇: 【建议收藏】IntelliJ IDEA