MySQL高级——MySQL的索引

目录

一、索引的介绍

1.1 索引的概念

1.2 索引的分类

二、索引的操作 

2.1 普通索引

 2.2 唯一索引

2.3 主键索引

 2.4 组合索引

2.5 全文索引

2.6 空间索引

2.6 索引的优缺点 


一、索引的介绍

1.1 索引的概念

1、索引就类似一本书的目录、看书中的某个内容时,可以新通过目录快速定位知识点的位置
2、MySQL的索引就是给每一行数据生成一个编号,通过这个编号可以快速的定位到某一行的位置,避免全表扫描
3、值经常修改的列,不能加索引,因为索引要重构,索引本身也要占磁盘空间

1.2 索引的分类

按照功能划分,索引划为以下分类:

二、索引的操作 

2.1 普通索引

普通索引对列没有特殊要求,列值可以重复,也可以为空
# MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。

语法:

# 创建表的时候加索引
create  table student(
    sid int primary key,
    card_id varchar(20),
    name varchar(20),
    gender varchar(20),
    age int,
    birth date,
    phone_num varchar(20),
    score double,
    index index_name(name) -- 给name列创建索引
);

# 创建表之后单独加
-- create index indexname on tablename(columnname); 
create index index_gender on student(gender); 


# 修改表结构加

-- 方式3-修改表结构(添加索引)
-- alter table tablename add index indexname(columnname)
alter table student add index index_age(age);



# 查看表中所有索引
-- show index from table_name; 
show index from student;


# 删除索引
-- drop index 索引名 on 表名 
-- 或 
-- alter table 表名 drop index 索引名
drop index index_gender on student 
-- 或 
alter table student drop index index_name

 2.2 唯一索引

 唯一索引与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值

语法: 

-- 方式1-创建表的时候直接指定
create  table student2(
    sid int primary key,
    card_id varchar(20),
    name varchar(20),
    gender varchar(20),
    age int,
    birth date, 
    phone_num varchar(20),
    score double,
    unique index_card_id(card_id) -- 给card_id列创建索引
);
-- 方式2-直接创建
-- create unique index 索引名 on 表名(列名) 
create unique index index_card_id on student2(card_id);

-- 方式3-修改表结构(添加索引)
-- alter table 表名 add unique [索引名] (列名)
alter table student2 add unique index_phone_num(phone_num

2.3 主键索引

每张表一般都会有自己的主键,当我们在创建表时,MySQL会自动在主键列上建立一个索引,这就是主键索引。主键是具有唯一性并且不允许为NULL,所以他是一种特殊的唯一索引。
# 主键索引,要求列的值必须非空+唯一

语法:

create  table student2(
    sid int primary key,  # 主键索引
    card_id varchar(20),
    name varchar(20),
    gender varchar(20),
    age int,
    birth date, 
    phone_num varchar(20),
    score double
);

 2.4 组合索引

 1、组合索引也叫复合索引,指的是我们在建立索引的时候使用多个字段,例如同时使用身份证和手机号建立索引,同样的可以建立为普通索引或者是唯一索引。
2、复合索引的使用复合最左原则。
# 身份证号 + 手机号  --->淘宝账号

语法:

-- 组合索引
use mydb5;
-- 创建普通组合索引的基本语法-- 普通索引 列值可以重复
-- create index indexname on table_name(column1(length),column2(length)); 
create index index_phone_name on student(phone_num,name);
-- 操作-删除索引
 drop index index_phone_name on student; 
 
-- 创建唯一组合索引的基本语法-- 唯一索引  列值不能重复
create  unique index index_phone_name on student(phone_num,name); 



select * from student where name = '张三'; 
select * from student where phone_num = '15100046637'; 
select * from student where phone_num = '15100046637' and name = '张三'; 
select * from student where name = '张三' and phone_num = '15100046637'; 
/* 
  三条sql只有 2 、 3、4能使用的到索引idx_phone_name,因为条件里面必须包含索引前面的字段  才能够进行匹配。
  而3和4相比where条件的顺序不一样,为什么4可以用到索引呢?是因为mysql本身就有一层sql优化,他会根据sql来识别出来该用哪个索引,我们可以理解为3和4在mysql眼中是等价的。 

*/

2.5 全文索引

1)全文索引的关键字是fulltext

2)全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较,它更像是一个搜索引擎,基于相似度的查询,而不是简单的where语句的参数匹配。

3)用 like + % 就可以实现模糊匹配了,为什么还要全文索引?like + % 在文本比较少时是合适的,但是对于大量的文本数据检索,是不可想象的。全文索引在大量的数据面前,能比 like + % 快 N 倍,速度不是一个数量级,但是全文索引可能存在精度问题。

2.6 空间索引

1) MySQL在5.7之后的版本支持了空间索引,而且支持OpenGIS几何数据模型

2)空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。

3)MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。

4)创建空间索引的列,必须将其声明为NOT NULL。

5)空间索引一般是用的比较少,了解即可。

2.6 索引的优缺点 

 #索引的优点
大大加快数据的查询速度,提高排序的效率
创建唯一索引,能够保证数据库表中每一行数据的唯一性
 
#索引的缺点
创建索引和维护索引需要消耗时间,并且随着数据量的增加,时间也会增加
索引需要占据磁盘空间
对数据表中的数据进行增加,修改,删除时,索引也要动态的维护,降低了维护的速度

#创建索引的原则
更新频繁的列不应设置索引
数据量小的表不要使用索引(毕竟总共2页的文档,还要目录吗?)
重复数据多的字段不应设为索引(比如性别,只有男和女,一般来说:重复的数据超过百分之15就不该建索引)
首先应该考虑对where 和 order by 涉及的列上建立索引

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值