mysql 索引

二、索引
索引在Mysql中是存储引擎用于快速找到记录的一种数据结构(BTree,平衡树),索引对于数据库的良好性能是非常关键的,尤其是当表中的数据量越来越大的时候,索引对于性能的影响愈发重要。
索引相当于字典的目录,如果查找某个字的时候可以通过目录,提高查询速度,否则需要翻阅字典的每一页。
使用索引的目的:提高查询速度。
索引特点:创建和维护索引会消耗很多时间与磁盘空间,但是查询速度大大提高。
(创建字典目录需要时间,字典目录需要占字典大小)
(一)、语法
语法1:创建表时,添加索引。

create table 表名(
字段名1 数据类型,
字段名2 数据类型,
...,
Index | key  [索引名称]  (字段名) 
);

语法2:创建完表后,添加索引。

create table 表名(
字段名1 数据类型,
字段名2 数据类型,
..., 
);
alter table 表名 add {unique | primay key| index...索引种类} 索引名(字段名) 

(二)、索引分类
(1)、普通索引 就是一个普通的索引,可以为空,可以重复。

ALTER TABLE teacher ADD INDEX name_index(column); 

在这里插入图片描述

(2)、唯一索引 可以为空,不可以重复。

ALTER TABLE teacher ADD UNIQUE(column); # 添加唯一索引 
ALTER TABLE teacher ADD column type UNIQUE; # 添加列并且添加索引。

alter table t2 add UNIQUE phone_index(phone);
show create table t2;
/**
CREATE TABLE `t2` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  UNIQUE KEY `phone_index` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
**/

(3)、主键索引 不可以为空,不可以重复。

ALTER TABLE teacher ADD PRIMARY KEY(column); 

只要是主键,就是索引。

alter table t2 add PRIMARY key(id);
/**
CREATE TABLE `t2` (
  `id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(20) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `phone_index` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
**/

(4)、多列索引。

ALTER TABLE teacher ADD INDEX(column1,column2,column3); 

在这里插入图片描述

/**
CREATE TABLE `t2` (
  `id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(20) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `chinese` int(11) DEFAULT NULL,
  `math` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `phone_index` (`phone`),
  KEY `chinese` (`chinese`,`math`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
**/

(三)、删除索引

Drop index 索引名 on 表名;
drop index phone_index on t2;
show create table t2;

使用索引:
1、少量数据不使用索引
2、查询次数少不使用索引
3、查询要携带索引字段,通常放在select之后第一个
4、索引提高了查询的效率,占有跟多的资源。索引不是越多越好。(一本书,半本书是目录不可以)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值