mysql基础-4

48 阅读2分钟

1 索引

-- 12 索引
-- 12.1 就是为了提高数据表的查询效率的工具
-- 12.2 创建数据表
create table tb_testindex(
  fid int primary key,
	sid int unique,
	tid int,
	name varchar(20),
	remark varchar(20)
);

-- 12.3 数据准备
create procedure proc_readydata()
begin
  declare i int default 1;
	while i <= 50000 do 
	  insert into tb_testindex(fid,sid,tid,name,remark) values (i,i,i,'test_name','test_remark');
		set i = i + 1;
	end while; 
end;

-- 12.4 调用存储过程
call proc_readydata();
select count(1) from tb_testindex;
select * from books;

-- 12.5 创建一个数据表的目录,就是表的索引,就是吧数据表的一列或者几列取出来构造进行存储,身材目录,然后在数据查询的时候先在目录里面查找
-- 12.6 索引的分类
-- 1 主键索引primary key 修饰,每个表只能有一个主键 2 唯一索引  3 普通索引  4 组合索引
-- 2 说明:创建数据表的时候,将字段声明为主键,会自动创建一个主键索引;
-- 3 说明:创建数据表的时候,将字段声明为唯一键(添加唯一约束),会自动在唯一字段创建唯一索引;
show indexes from tb_testindex;
-- 创建唯一索引
create unique index index_test on tb_testindex(tid);
-- 创建普通索引
create index index_test2 on tb_testindex(name);
-- 创建组合索引
create index index_test3 on tb_testindex(tid,name);
-- 全文索引,5.6新增的索引,可以通过该索引可以进行全文检索不支持中文,因此不被开发者关注,在应用开发中一般是通过搜索引擎(数据库中间件)来实现全文索引的

-- 12.5 索引的使用
-- 创建以后不需要调用,当我们根据创建的列进行数据查询是,会自动使用索引
select * from tb_testindex where tid = 25000;
select * from tb_testindex where name = 'aaa';
select * from tb_testindex where tid = 25000 and name = 'test_name';
-- 下面这个在命令行界面才可以使用,可以看见,查询规划
select * from tb_testindex where tid = 25000\G;

-- 12.6 查看索引
show create table tb_testindex; -- ,命令行界面可以查看
show keys from tb_testindex;

-- 12.7 删除索引
drop index index_test3 on tb_testindex;

-- 12.8 索引的使用总结
--    1 索引大量减低了数据库服务器执行查询操作时扫描的数据
--    2 可以避免服务器排序,将随机io编程顺序io

--    3 根据数据表列创建的,当数据表里面的数据发生dml操作时,索引也要更新
--    4 索引文件也会占用磁盘空间

--    5 数据表数据不多时候,全表扫描可能更快,不使用索引
--    6 数据量大但是dml操作频繁,不建议
--    7 重复比较高
--    8 要注意查询sql语句的编写,避免索引失效