## 1、數據庫優化的目的
**避免出現頁面訪問錯誤**
* 由于數據庫連接timeout產生頁面5XX錯誤
* 由于慢查詢造成頁面無法加載
* 由于阻塞造成數據無法提交
**增加數據庫穩定性**
* 很多數據庫問題都是由于低效的查詢引起的
**優化用戶體驗**
* 流暢頁面的訪問速度
* 良好的網站功能體驗
## 2、可以從幾個方面進行數據庫優化

在這個金字塔結構中`SQL及索引`優化占最大的面積而且同時也是金字塔的基礎,對于優化來說,`SQL及索引`優化是最重要的。
**SQL及索引**
`在這一步需要做什么那?`
* 根據需求寫出一個結構良好的SQL
* 根據這個SQL在表中建立一些**有效**的索引.
* 索引太多,不但影響寫入時的效率,對于查詢時的效率也是會有影響的。
* 索引一定要適量,一定要有效。
**數據庫表結構**
* 如果表結構設計的不合理,就很難寫出一個結構良好的SQL,也很難對SQL進行優化。所以SQL及索引的優化是表結構的設計。
* 要根據數據庫范式的要求來進行簡潔明了的設計,盡量減少冗余。
* 要思考怎么樣的表結構有利于SQL的查詢
**系統配置**
* 系統本身也有一些限制如:
* TCP/IP連接數的限制
* 打開文件數的限制,最重要的。MYSQL是基于文件的,每查詢一些表都要打開一些文件,如果文件數達到了一定限制,這個文件就無法打開,就會進行頻繁的I/O操作。
* 安全性的限制
**硬件優化**
* 更適合數據庫的CPU
* CPU越多并不一定會對數據庫有更好的影響,MySQL會對CPU核數有一個限制,并不會用到太多的核數,有的查詢只能用到單核。
* 更快的I/O
* 并不能減少數據庫鎖的機制,因為鎖是數據庫內部保持數據完整性的機制,所以說I/O很快,并不能減少數據庫的阻塞。
* 更多的內存
* 數據庫的數據是先裝在內存中,然后在進行查詢修改的。內存越大對數據庫的性能就越好。
如果SQL和索引沒有優化好,數據庫查詢產生慢查詢或者產生大量阻塞,這種情況是由于MySQL內部的一些鎖機制造成的,所以再好的硬件也是沒有辦法對這些進行優化。一旦慢查詢很多阻塞很多,那么并發量就會上去。并發量上去,再好的硬件\*\*也會很高,造成應用響應緩慢。