MYSQL详解(5)-索引(一)

一.什么是索引

1.索引:索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据;对于索引,会保存在另外的文件中。

2.索引是数据库中专门用于帮组用户快速查询数据的一种数据结构,类似于字典的目录,查找字典内容时,可以根据目录查找到数据的存放位置,然后快速定位;

3.

a.索引可以由数据库中的一列或多列组合而成,其作用是提高对表中数据的查询速度;

b.索引的优点是可以提高检索数据的速度;

c.索引的缺点是创建和维护索引需要耗费时间;

d.索引可以提高查询速度,会减慢写入速度;

二.索引的分类

普通索引:加速查询

eg:  create table in1(

    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    index ix_name (name)

    )创建表和索引

创建索引:

create index index_name on table_name(column_name)

删除索引:

drop index_name on table_name;

查看索引:

show index from table_name;

注:对于创建索引时如果是BLOB 和 TEXT 类型,必须指定length。

create index ix_extra on in1(extra(32));

唯一索引:加速查询 和 唯一约束(可含null)

eg:创建表+唯一索引

create table in1(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    unique ix_name (name)

)

创建唯一索引:

create unique index 索引名 on 表名(列名)

删除唯一索引:

drop unique index 索引名 on 表名


主键索引:加速查询 和 唯一约束(不可含null)

创建表+创建主键

create table in1(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    index ix_name (name)

)

创建主键

alter table 表名 add primary key(列名);

删除主键

alter table 表名 drop primary key;
alter table 表名  modify  列名 int, drop primary key;


组合索引:组合索引是将n个列组合成一个索引,其应用场景为:频繁的同时使用n列来进行查询,如:where n1 = 'alex' and n2 = 666。

创建表

create table in3(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text

)

创建组合索引

create index ix_name_email on in3(name,email);

如上创建组合索引之后,查询:

  • name and email  -- 使用索引
  • name                 -- 使用索引
  • email                 -- 不使用索引

注意:对于同时搜索n个条件时,组合索引的性能好于多个单一索引合并。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值