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語句>