1. 程式人生 > 資料庫 >MYSQL面試題-索引

MYSQL面試題-索引

MYSQL面試題-索引

引自B站up程式設計不良人:

一、什麼是索引?

官方定義:索引是一種幫助mysql提高查詢效率的資料結構。

索引的優點:大大加快資料查詢速度

索引的缺點:

​ 1.維護索引需要耗費資料庫資源

​ 2.索引需要佔用磁碟空間

​ 3.當對錶的資料進行增刪改的時候,因為要維護索引,速度會受到影響

二、索引的分類

  • a.主鍵索引
    設定為主鍵後資料庫會自動建立索引,innodb為聚簇索引

  • b.單值索引
    即一個索引只包含單個列,一個表可以有多個單列索引

  • c.唯一索引
    索引列的值必須唯一,但允許有空值

  • d.複合索引
    即一個索引包含多個列

  • e.Full Text 全文索引 (My5.7版本之前 只能由於MYISAM引擎)

    全文索引型別為FULLTEXT,在定義索引的列上支援值的全文查詢,允許在這些索引列中插入重複值和空值。全文索引可以在CHAR、VARCHAR、TEXT型別列上建立。MYSQL只有MYISAM儲存引擎支援全文索引

三、索引的基本操作

3.1 主鍵索引

建立表的時候自動建立的。

--建表 主鍵自動建立主鍵索引
create table t_user(id varchar(20) primary key,name varchar(20));
--檢視索引
show index from t_user;

3.2 單列索引(也叫普通索引或單值索引)

--建表時建立
create table t_user(id varchar(20) primary key,name varchar(20),key(name));  
	'注意:隨表一起建立的索引索引名同列名一致'
	  
--建表後建立
create index nameindex on t_user(name);

--刪除索引
drop index 索引名 on 表名

3.3 唯一索引

--建表時建立
 create table t_user(id varchar(20) primary key,name varchar(20),unique(name));

--建表後建立
create unique index nameindex on t_user(name);

3.4 複合索引

---建表時建立
 create table t_user(id varchar(20) primary key,name varchar(20),age int,key(name,age));
 
--建表後建立
 create index nameageindex on t_user(name,age);

四、索引的底層原理

---建表
create table t_emp(id int primary key,name varchar(20),age int);

--插入資料
insert into t_emp values(5,'d',22);
insert into t_emp values(6,'d',22);
insert into t_emp values(7,'e',21);
insert into t_emp values(1,'a',23);
insert into t_emp values(2,'b',26);
insert into t_emp values(3,'c',27);
insert into t_emp values(4,'a',32);
insert into t_emp values(8,'f',53);
insert into t_emp values(9,'v',13);

--查詢
select * from t_emp;

五、為什麼上面資料明明沒有按順序插入,為什麼查詢時卻是有順序呢?

原因是:mysql底層為主鍵自動建立索引,建立索引會進行排序,mysql底層真正儲存是這樣的

為什麼要排序呢?

因為排序之後在查詢就相對比較快了 如查詢 id=3的我只需要按照順序找到3就行啦(如果沒有排序大海撈針,全靠運氣