天天看點

面試積累-MySQL-關于索引問題請簡述常用的索引有哪些種類?MySQL資料庫中索引的工作機制是什麼?MySQL中 myisam 與 innodb 的差別?MySQL 中 InnoDB 引擎的行鎖是通過加在什麼上完成(或稱實作) 的?

請簡述常用的索引有哪些種類?

  1. 普通索引: 即針對資料庫表建立索引
  2. 唯一索引: 與普通索引類似,不同的就是:MySQL 資料庫索引列的值 必須唯一,但允許有空值
  3. 主鍵索引: 它是一種特殊的唯一索引,不允許有空值。一般是在建表的 時候同時建立主鍵索引
  4. 組合索引: 為了進一步榨取 MySQL 的效率,就要考慮建立組合索引。 即将資料庫表中的多個字段聯合起來作為一個組合索引。

MySQL資料庫中索引的工作機制是什麼?

資料庫索引,是資料庫管理系統中一個排序的資料結構,以協助快速查詢、更新資料庫表中資料。

索引的實作通常使用 B 樹及其變種 B+樹

MySQL中 myisam 與 innodb 的差別?

  1. 事務支援
    • MyISAM :強調的是性能,每次查詢具有原子性 , 其執行數 度比 InnoDB 類型更快,但是不提供事務支援。
    • InnoDB:提供事 務支援事務,外部鍵等進階資料庫功能。 具有事務(commit)、復原 (rollback)和崩潰修複能力(crash recovery capabilities)的事務安全 (transaction-safe (ACID compliant))型表。
  2. InnoDB 支援行級鎖,而 MyISAM 支援表級鎖.
    • 使用者在操作 myisam 表時,select,update,delete,insert 語句都會給表自動 加鎖,如果加鎖以後的表滿足 insert 并發的情況下,可以在表的尾部插 入新的資料。
  3. InnoDB 支援 MVCC, 而 MyISAM 不支援
  4. InnoDB 支援外鍵,而 MyISAM 不支援
  5. 表主鍵
    • MyISAM :允許沒有任何索引和主鍵的表存在,索引都是保 存行的位址。
    • InnoDB:如果沒有設定主鍵或者非空唯一索引,就會 自動生成一個 6 位元組的主鍵(使用者不可見),資料是主索引的一部分,附 加索引儲存的是主索引的值。
  6. InnoDB 不支援全文索引,而 MyISAM 支援。
  7. 可移植性、備份及恢複
    • MyISAM :資料是以檔案的形式存儲,是以 在跨平台的資料轉移中會很友善。在備份和恢複時可單獨針對某個表進 行操作。
    • InnoDB:免費的方案可以是拷貝資料檔案、備份 binlog,或者用 mysqldump,在資料量達到幾十 G 的時候就相對痛 苦了
  8. 存儲結構
    • MyISAM :每個 MyISAM 在磁盤上存儲成三個檔案。第一 個檔案的名字以表的名字開始,擴充名指出檔案類型。 .frm 檔案存儲表 定義。資料檔案的擴充名為 .MYD (MYData) 。索引檔案的擴充名 是 .MYI (MYIndex) 。
    • InnoDB:所有的表都儲存在同一個資料檔案 中(也可能是多個檔案,或者是獨立的表空間檔案),InnoDB 表的大 小隻受限于作業系統檔案的大小,一般為 2GB。

MySQL 中 InnoDB 引擎的行鎖是通過加在什麼上完成(或稱實作) 的?

InnoDB 行鎖是通過給索引上的索引項加鎖來實作的,這一點 MySQL 與 Oracle 不同,後者是通過在資料塊中對相應資料行加鎖來實作的。InnoDB 這 種行鎖實作特點意味着:隻有通過索引條件檢索資料,InnoDB 才使用行級 鎖,否則,InnoDB 将使用表鎖!