阿里Java开发手册——如何优化数据库?
作者:楊冠寶/高海慧
來自:碼出高效 Java 開發手冊
數據庫作為服務器端最為最為昂貴的資源之一,如果使用不當常常會導致系統卡頓或系統崩潰,那如何來優化數據庫呢?下面來看阿里巴巴《Java開發手冊》給出的優化方案。
1
建立高效且合適的索引
索引誰都可以建,但想要建好又難度極大。因為索引既要有數據特征,又有業務特征,數據量的變化會影響索引的選擇,業務特點不一樣,索引的優化思路也不一樣。通常某個字段平時不用,但是某種場景下命中“索引缺失”的字段會導致查詢瞬間變慢。所以要事先明確業務場景,建立合適的索引。
2
排查連接資源為顯示關閉的情形
要特別注意在 ThreadLocal 或流式計算中使用數據庫連接的地方。
3
合并短的請求
根據 CPU 空間局部性原理,對于相近的數據,CPU 會一起提取到內存中。另外,合并請求也可以有效減少連接的次數。
4
合理拆分多個表join的SQL
若是超過三個表則禁止 join,如果表結構建的不合理,應用邏輯處理不當,業務模型抽象有問題,name 三標 join 的數據量由于笛卡爾積操作會呈現幾何倍數的增加,所以不推薦這樣的做法。另外,對于需要 join 的字段,數據類型應保持絕對一致。多表關聯查詢時,應確保被關聯的字段要有索引。
5
使用臨時表
某種情況下該方法是一種比較好的選擇。曾經遇到一個場景不適用臨時表需要執行 1 個多小時,使用臨時表降低到 2 分鐘以內。因為在不斷的嵌套查詢中,已經無法很好地利用現有的索引提升查詢效率,所以把中間結果保存到臨時表,然后重建索引,再通過臨時表進行后續的數據操作。
6
應用層優化
包括進行數據結構優化、并發多線程改造等。
7
改用其他數據庫
因為不同數據庫針對的業務場景是不同的,比如 Cassandra、MongoDB。
【END】
關注下方二維碼,訂閱更多精彩內容
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的阿里Java开发手册——如何优化数据库?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis 面试题补充与汇总
- 下一篇: 一文带你轻松搞懂事务隔离级别(图文详解)