1. MySQL中索引什麼做用?
索引的定義和建立的目的
1) 索引是對數據庫表中一列或者多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息
2) 索引的分類:主鍵索引,惟一索引,常規索引,全文索引
3) 建立索引的目的就是加快檢索表中的數據的速度,也就是查詢數據的速度
索引是越多越好嗎
1) 不是,索引過多的建立,會帶來數據的寫入的代價太高,即減慢數據寫入速度
索引的建立爲何會影響寫入的速度?
1) MyISAM引擎:數據的存儲分爲三個文件
* Table.frm 存儲表定義
* Table.MYD 存儲表數據
* Table.MYI 存儲表索引
2) InnoDB引擎:存儲方式
* 共享表空間:一個表中數據能夠橫跨多個文件
* 單獨表空間:文件1,是表1的數據.文件2,是表2的數據
3) 答案:索引也是存在文件中的,索引也是一中數據也須要寫到磁盤上,索引越多表明數據量越大,寫入的時候可能伴隨索引數據更新.
索引是如何工做的:
1) MyISAM引擎:看書場景:查看目錄-->找到內容,由於有單獨的文件存儲索引,先找到索引在哪裏MYI,而後再找數據在哪裏MYD
2) InnoDB引擎:逛超市場景:尋找區域-->即找到內容
MySQL中存儲引擎的區別
MyISAM引擎
1) 在進行數據的備份,遷移,恢復等操做時,很是容易,只要對文件進行操做就能夠
2) 只支持表鎖,沒有行鎖
3) 不支持事物安全,但每次讀的操做是就有原子性的,因此沒必要擔憂髒讀等狀況
InnoDB引擎
1) 支持事物,回滾,崩潰修復,因此對數據安全性較高的業務場景都選擇了這個引擎
2) 支持行級鎖,行級鎖的支持大大提升了數據庫的併發操做能力
3) 支持外鍵約束,在MySQl中,只有InnoDB支持外鍵,在範式設計原則下,外鍵約束保證了數據的完整性
2. 如何分析一條查詢SQL的效率?
如何進行SQl優化
1) 執行計劃:explain
用法:explain <SQL語句>