MySQL面试题 | 附答案解析(二)
1.?什么是索引?索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含著對數據表里所有記錄的引用指針。索引是一種數據結構。數據庫索引,是數據庫管理系統中一個排序的數據結構,以協助快速查詢、更新數據庫表中數據。索引的實現通常使用B樹及其變種B+樹。更通俗的說,索引就相當于目錄。為了方便查找書中的內容,通過對內容建立索引形成目錄。索引是一個文件,它是要占據物理空間的。2. 索引有哪些優缺點?索引的優點可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。索引的缺點時間方面:創建索引和維護索引要耗費時間,具體地,當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,會降低增/改/刪的執行效率;空間方面:索引需要占物理空間。3. 索引使用場景(重點)where
上圖中,根據id查詢記錄,因為id字段僅建立了主鍵索引,因此此SQL執行可選的索引只有主鍵索引,如果有多個,最終會選一個較優的作為檢索的依據。-- 增加一個沒有建立索引的字段alter table innodb1 add sex char(1);-- 按sex檢索時可選的索引為nullEXPLAIN SELECT * from innodb1 where sex=‘男’;
order by當我們使用order by將查詢結果按照某個字段排序時,如果該字段沒有建立索引,那么執行計劃會將查詢出的所有數據使用外部排序(將數據從硬盤分批讀取到內存使用內部排序,最后合并排序結果),這個操作是很影響性能的,因為需要將查詢涉及到的所有數據從磁盤中讀到內存(如果單條數據過大或者數據量過多都會降低效率),更無論讀到內存之后的排序了。但是如果我們對該字段建立索引alter table 表名 add index(字段名),那么由于索引本身是有序的,因此直接按照索引的順序和映射關系逐條取出數據即可。而且如果分頁的,那么只用取出索引表某個范圍內的索引對應的數據,而不用像上述那取出所有數據進行排序再返回某個范圍內的數據。(從磁盤取數據是最影響性能的)join、對join語句匹配關系(on)涉及的字段建立索引能夠提高效率索引覆蓋如果要查詢的字段都建立過索引,那么引擎會直接在索引表中查詢而不會訪問原始數據(否則只要有一個字段沒有建立索引就會做全表掃描),這叫索引覆蓋。因此我們需要盡可能的在select后只寫必要的查詢字段,以增加索引覆蓋的幾率。這里值得注意的是不要想著為每個字段建立索引,因為優先使用索引的優勢就在于其體積小。最后,小編分類整理了許多java進階學習材料和BAT面試給熱愛IT行業的你,如果需要資料的請轉發此文章后再私聊小編回復【java】就能領取2019年java進階學習資料和BAT面試題以及《Effective Java》(第3版)電子版書籍。也可以加群:712263501領取海量學習資料進行學習。
總結
以上是生活随笔為你收集整理的MySQL面试题 | 附答案解析(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 萃开头的成语接龙大全
- 下一篇: MySQL面试题 | 附答案解析(三)