索引相似大學圖書館建書目索引,能夠提升數據檢索的效率,下降數據庫的IO成本。MySQL在300萬條記錄左右性能開始逐漸降低,雖然官方文檔說500~800w記錄,因此大數據量創建索引是很是有必要的。MySQL提供了Explain,用於顯示SQL執行的詳細信息,能夠進行索引的優化。sql
1、致使SQL執行慢的緣由:數據庫
硬件問題。如網絡速度慢,內存不足,I/O吞吐量小,磁盤空間滿了等。服務器
沒有索引或者索引失效。(通常在互聯網公司,DBA會在半夜把表鎖了,從新創建一遍索引,由於當你刪除某個數據的時候,索引的樹結構就不完整了。因此互聯網公司的數據作的是假刪除.一是爲了作數據分析,二是爲了避免破壞索引 )網絡
數據過多(分庫分表)數據結構
服務器調優及各個參數設置(調整my.cnf)運維
2、分析緣由時,必定要找切入點:性能
先觀察,開啓慢查詢日誌,設置相應的閾值(好比超過3秒就是慢SQL),在生產環境跑上個一天事後,看看哪些SQL比較慢。大數據
Explain和慢SQL分析。好比SQL語句寫的爛,索引沒有或失效,關聯查詢太多(有時候是設計缺陷或者不得以的需求)等等。優化
Show Profile是比Explain更近一步的執行細節,能夠查詢到執行每個SQL都幹了什麼事,這些事分別花了多少秒。spa
找DBA或者運維對MySQL進行服務器的參數調優。
3、什麼是索引?
MySQL官方對索引的定義爲:索引(Index)是幫助MySQL高效獲取數據的數據結構。咱們能夠簡單理解爲:快速查找排好序的一種數據結構。Mysql索引主要有兩種結構:B+Tree索引和Hash索引。咱們日常所說的索引,若是沒有特別指明,通常都是指B樹結構組織的索引(B+Tree索引)。索引如圖所示: