1. 程式人生 > 實用技巧 >SQL中的索引

SQL中的索引

概述

  • 索引(index)作用:
    相當於一本字典目錄,提高程式的檢索/查詢效率,表中每一個欄位都可新增索引。
  • 主鍵自動新增索引:
    主鍵和具有unique約束的欄位自動會新增索引。能夠通過主鍵查詢的儘量通過主鍵查詢,效率較高。
  • 儲存地址
    索引和表相同,都是一個物件,表是儲存在硬碟檔案中的,那麼索引也是表的一部分,索引也儲存在硬碟檔案中。
  • MySQL資料庫中表的檢索方式有2種:
    第一種:全表掃描(效率較低)
    第二種:通過索引檢索(提高查詢效率)
  • 什麼情況下適合給表中欄位新增索引?
    1、該欄位資料量龐大;
    2、該欄位很少的DML操作;(由與索引也需要維護,DML操作多的話,也影響檢索效率)(資料一旦修改,索引需要重新排序)
    3、該欄位經常出現在where條件中。
  • 檢視SQL語句的執行計劃
EXPLAIN SELECT
	id,
	`name` 
FROM
	t_user 
WHERE
	`name` = 'lisi';

索引的應用

建立索引
  • 語法結構:
    a)create index 索引名 on 表名(列名)
    b)create unique index 索引名 on 表名(列名)
    注:新增unique表示在該表中的該列新增一個唯一性約束。
  • 示例:
create index dept_dname_index on t_user(name);

再檢視解釋:

檢視索引
  • 語法結構:
    show index from 表名;
  • 示例:
show index from dept;

刪除索引
  • 語法結構:
    drop index 索引名 on 表名;
  • 示例:
drop index dept_dname_index on t_user;

索引的實現原理

索引底層採用的資料結構是:B + Tree

  • 索引的實現原理?
    通過B + Tree縮小掃描範圍,底層索引進行了排序、分割槽,索引會攜帶資料在表中的“實體地址",最終通過索引檢索到資料之後,獲取到關聯的實體地址,通過實體地址定位表中的資料。效率是最高。
  • 示例:
    select ename from emp where ename ='SMITH';
    通過索引轉換為:
    select ename from emp where 實體地址 = 0x3;
  • 索引的分類
    單一索引:給單個欄位新增索引
    複合索引:給多個欄位聯合起來新增1個索引
    主鍵索引:主鍵上會自動新增索引
    唯一索引:有unique約束的欄位上會自動新增索引
  • 索引什麼時候失效?
    模糊查詢的時候,第一個萬用字元使用的是%,這個時候索引是失效的。