MySQL数据库——索引

(一)什么是索引?

  1. 索引的出现主要是针对查询,为了提高查询速度。
  2. 索引是存储引擎快速用于找到记录的一种数据结构。
    索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。
    索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。

(二)索引的原理

  1. 索引的本质:
    不断的缩小想要获取数据的范围筛选出最终想要的结果。

(三)常见的四种索引

  1. 主键索引(primary key)
  2. 唯一索引(unique)
  3. 普通索引(index)
  4. 全文索引(fulltext)

(四)索引的创建

  1. 主键索引的创建(三种方式)
    主键索引即就是使用主键。
    主键索引的创建方式有三种:
    (1)在建表的时候直接在字段后指明主键。
    (2)在建表的时候若有多个主键,定义为复合主键,在建表的最后全部指明。
    (3)若表定义结束以后想定义主键,可以在建表之后追加主键


    三种创建主键索引方式的举例:
// 1. 在创建表的时候,直接在字段后指明
create table student(
 id int primary key,
 name varchar(20)
 );
 //2. 在建表的最后,指定某列或某几列为主键索引
create table student(
 id int,
 name varchar(20),
 age int,
 primary key(id, name)
 );
 //3. 创建表以后添加主键
 create table student(
 id int ,
 name varchar(20)
 );
 alter table student add primary key(id);

主键索引的特点:
(1)一个表中,最多有一个主键索引,或者使用复合主键。
(2)主见不可重复。
(3)创建主键索引的列的值不能为空。
(4)主键索引的列基本为int。

2. 唯一索引(三种方式)
唯一索引的三种创建方式与主键索引类似,只需将primary key 换成 unique。
唯一索引的特点:
(1)在一个表中。可以有多个唯一索引。
(2)唯一索亚尼所在的列,不能有重复值。
(3)若将唯一索引所在的列指定为not null,则相当于主键索引。

3. 普通索引的创建(三种方式)
(1)在表的定义最后,指定某列为索引。
(2)在建完表以后,追加某列为索引(alter)。
(3)创建一个名为***的索引(create)。


普通索引创建的三种方式:

//1. 在表的定义最后,指定某列为索引
create table student(
 id int ,
 name varchar(20)index(id)
 );
 //2. 在表创建完以后,追加某列为普通索引
 create table student(
 id int,
 name varchar(20)
 );
 alter table tsudent add index(id);
 //3. 创建一个名为** 的索引
 create index id_name on student(name);

普通索引的特点:
一个表中可以有多个普通索引。

4. 全文索引
(1)当对大量文章字段进行检索时,使用全文索引。
(2)MySQL提供全文索引机制,但是前提是存储引擎必须是MyISAM,且默认为英文,不支持中文。

(1)全文索引的创建:

mysql> create table articles(
    -> id int unsigned auto_increment primary key,
    -> title varchar(200),
    -> body text,
    -> fulltext(title,body)
    -> )engine=MyISAM;
    
Query OK, 0 rows affected (0.02 sec)

(2)如何使用全文索引
1)首先先插入一些数据:


mysql> insert into articles(title,body) values
    -> ('one','123database'),
    -> ('two','database666'),
    -> ('three','123456'),
    -> ('fore','abcdefg');
Query OK, 4 rows affected (0.01 sec)

2)查询有没有database数据

mysql> select * from  articles where body like "%database%";
+----+-------+-------------+
| id | title | body        |
+----+-------+-------------+
|  1 | one   | 123database |
|  2 | two   | database666 |
+----+-------+-------------+

3)使用explain工具查看是否使用索引
在这里插入图片描述
可以看到 key=null,此时表示没有用到索引
4)正确使用全文索引来查询数据

mysql> select * from articles
    -> where match (title,body) against ('database');

在这里插入图片描述

(五)查询索引

查询索引有三种方法:

  1. show keys from 表名
  2. show index from 表名
  3. desc 表名

(六)删除索引

删除索引有三种方法:‘

  1. 删除主键索引:alter table 表名 drop primary key
  2. 删除其他索引:alter table 表名 drop index 索引名(即key_name)
  3. drop index 索引名 on 表名
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值