mysql索引的面試題

1.可以使用多少列創建索引?

任何標準表最多可以創建16個索引列。

2.索引的底層實現原理和優化

B+樹,經過優化的B+樹

主要是在所有的葉子結點中增加了指向下一個葉子節點的指針,因此InnoDB建議爲大部分表使用默認自增的主鍵作爲主索引。

3. 什麼情況下設置了索引但無法使用 

1.以“%”開頭的LIKE語句,模糊匹配

2. OR語句前後沒有同時使用索引

3. 數據類型出現隱式轉化(如varchar不加單引號的話可能會自動轉換爲int型)

4.簡單描述mysql中,索引,主鍵,唯一索引,聯合索引的區別,對數據庫的性能有什麼影響(從讀寫兩方面)

索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含着對數據表裏所有記錄的引用指針。

普通索引(由關鍵字KEY或INDEX定義的索引)的唯一任務是加快對數據的訪問速度。

 

普通索引允許被索引的數據列包含重複的值。如果能確定某個數據列將只包含彼此各不相同的值,在爲這個數據列創建索引的時候就應該用關鍵字UNIQUE把它定義爲一個唯一索引。也就是說,唯一索引可以保證數據記錄的唯一性。

 

主鍵,是一種特殊的唯一索引,在一張表中只能定義一個主鍵索引,主鍵用於唯一標識一條記錄,使用關鍵字 PRIMARY KEY 來創建。

索引可以覆蓋多個數據列,如像INDEX(columnA, columnB)索引,這就是聯合索引。

 

索引可以極大的提高數據的查詢速度,但是會降低插入、刪除、更新表的速度,因爲在執行這些寫操作時,還要操作索引文件。

 

5.對於關係型數據庫而言,索引是相當重要的概念,請回答有關索引的幾個問題:

1.索引的目的是什麼?
快速訪問數據表中的特定信息,提高檢索速度
創建唯一性索引,保證數據庫表中每一行數據的唯一性。
加速表和表之間的連接

使用分組和排序子句進行數據檢索時,可以顯著減少查詢中分組和排序的時間

2.索引對數據庫系統的負面影響是什麼?
負面影響:
創建索引和維護索引需要耗費時間,這個時間隨着數據量的增加而增加;索引需要佔用物理空間,不光是表需要佔用數據空間,每個索引也需要佔用物理空間;當對錶進行增、刪、改、的時候索引也要動態維護,這樣就降低了數據的維護速度。

3.爲數據表建立索引的原則有哪些?
在最頻繁使用的、用以縮小查詢範圍的字段上建立索引。

在頻繁使用的、需要排序的字段上建立索引

4.什麼情況下不宜建立索引?
對於查詢中很少涉及的列或者重複值比較多的列,不宜建立索引。

對於一些特殊的數據類型,不宜建立索引,比如文本字段(text)等

6.主鍵、外鍵和索引的區別?

主鍵、外鍵和索引的區別

定義:

 主鍵–唯一標識一條記錄,不能有重複的,不允許爲空

 外鍵–表的外鍵是另一表的主鍵, 外鍵可以有重複的, 可以是空值

 索引–該字段沒有重複值,但可以有一個空值

作用:

 主鍵–用來保證數據完整性

 外鍵–用來和其他表建立聯繫用的

 索引–是提高查詢排序的速度

個數:

 主鍵–主鍵只能有一個

 外鍵–一個表可以有多個外鍵

 索引–一個表可以有多個唯一索引

7.你怎麼看到爲表格定義的所有索引?

 

索引是通過以下方式爲表格定義的:

SHOW INDEX FROM
<tablename>;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章