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>;