sql基础(4)之索引

MySQL 索引

一 ,索引简介

索引在MySQL中也叫做’键 key’,是存处引擎用于快速找到记录的一种数据结构.
索引对于良好的性能非常关键,尤其是当表中的数据越来越多,索引对于性能的影响愈发重要.
索引优化应该是对查询性能优化的最有效手段了,索引能够轻易将查询性能提高好几个数量级.
索引相当于新华字典的音序表,如果要查某个汉字,不使用音序表,则需要从几百页中的数据中去找找个汉字
简单理解就是,索引就像一本书的目录,让你很快能够查询到你想要的数据.

二,索引的分类

  • 普通索引
  • 唯一索引
  • 全文索引
  • 单列索引
  • 多列索引
  • 空间索引

三 ,索引的使用语法

例子:我们用一个存储过程先往一张表中多插入点数据,等会演示
DELIMITER $$

CREATE
    PROCEDURE testProcedure()
    BEGIN
    
    
	DECLARE i INT DEFAULT 1;
	WHILE (i<20000) DO
	    INSERT INTO mytestdb.test VALUES(i,'aaaa');
	    set i=i+1;
	 END WHILE;   
    END$$

DELIMITER ;
 查看所有存储过程 show procedure status\G  -- \G 排版一下显示格式,看起来好看些
 查看创建某个存储过程的语句 show create procedure testProcedure;
 调用存储过程 call autoinsertdata();  --括号可可不写

创建索引 使用 index 或者 key 关键字

  • 方式1:创建表的时候创建索引
  • 方式2:表已经创建好了,再去创建索引
  • 方式3:表已经创建好了,通过修改 alter table 语句再去创建索引
方式1:语法 
	create table 表名(
			字段名 数据类型 [约束],
			字段名2 数据类型2 [约束],
            [unique|fulltext|spatial] index|key
            [索引名](字段名[(长度)] [ASC|DESC])   -- 注意中括号里面的是可选项
	);
例如:创建普通索引
		create table student(
			sid int,
			sname varchar(32),
			index(sname) -- 给name 字段建立普通索引 注意字段不要带引号
		);
查看建表语句可以看到这个sname 字段,有没有加上索引
show create table student;

例如:创建唯一索引
    create table test(
    	tid int,
    	tname varchar(32),
    	unique index(tname)  -- 创建唯一索引,这列的值不能重复
    );
    
 例如:创建全文索引,一般针对这个字段是 text类型,比如存了一篇文章
 create table test2(
 	tid int,
 	tname varchar(32),
 	tlog text,
 	fulltext index myIndex (tlog)  -- 这个myIndex是你起的索引名,一般省略不写
 );
 
 例如:创建多列索引,给多个字段创建索引
  create table test2(
 	tid int,
 	tname varchar(32),
 	tlog varchar(100),
 	index my_Index (tname,tlog)  -- 给 tname 和 tlog 两个列都建立索引
 );
方式2:创建索引的语法 就是表已经存在我们给表中的某个字段,建立索引
	语法:	create [unique|fulltext|spatial] index 索引名 on 表名 (字段名[(长度)] [ASC|DESC]);

创建普通索引例子
	create index myIndex on student (sname);
创建全文索引例子
	create unique index myIndex on student (sname);
创建多列索引例子
	create index myIndex on student (sname,slog);
方式3:表已经存在,通过使用修改表的语句 alter table 给某个字段建立索引
	语法: alter table 表名 add [unique|fulltext|spatial] index 索引名 on 表名 (字段名[(长度)] [ASC|DESC]);
	
	创建普通索引的例子
		alter table student add index MyIndex(sname);
	创建唯一索引的例子
		alter table student add unique index MyIndex(sname);
	创建多列索引
	alter table student add index MyIndex(sname,slog); 

四,管理索引

查看索引
	show create table 表名\G;
删除索引
	drop index 索引名 on 表名;
测试索引是否提高了效率
	explain select * from student where sid=2000000;
	explain 这条测试语句是看查询优化器 怎么通过select语句去查 并没没有真正去查

五,测试索引的效率,从时间上和查询方式上对比

未加索引索引时 我们查一下,最后面的数据 看下耗时
select * from student where sid=2000000;  
再看一下查询优化器的查询方式
explain select * from student where sid=2000000;

然后我们给 sid 加上索引 再执行 上面两行代码对比一下即可看到加了索引效率会大大提高
这里注意 你的where条件后面使用的字段,加了索引 ,才是去使用索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值