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