MYSQL面試題-索引
阿新 • • 發佈:2021-01-07
MYSQL面試題-索引
引自B站up程式設計不良人:
一、什麼是索引?
官方定義:索引是一種幫助mysql提高查詢效率的資料結構。
索引的優點:大大加快資料查詢速度
索引的缺點:
1.維護索引需要耗費資料庫資源
2.索引需要佔用磁碟空間
3.當對錶的資料進行增刪改的時候,因為要維護索引,速度會受到影響
二、索引的分類
-
a.主鍵索引
設定為主鍵後資料庫會自動建立索引,innodb為聚簇索引 -
b.單值索引
即一個索引只包含單個列,一個表可以有多個單列索引 -
c.唯一索引
索引列的值必須唯一,但允許有空值 -
d.複合索引
即一個索引包含多個列 -
e.Full Text 全文索引 (My5.7版本之前 只能由於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就行啦(如果沒有排序大海撈針,全靠運氣