发表于: 2017-11-30 19:50:30
1 669
本日任务:
整理概念,做完任务1
一 索引
1.1 什么是索引
索引是:
一个数据库对象
用来加速对表的查询
通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O
与表独立存放
由数据库自动维护
1.2 索引原理
如图所示,首先给表中的某一列增加索引,之后数据库就按照倒序表的顺序对数据库进行反排列,生成倒序表,查询的时候就按照倒序表进行查询,如此速度大大加快,要注意,因为索引要进行排序,所以必须要分析1下如何使用索引。
哪些值可以创建索引?
1,外键一般要创建索引
2,经常使用的查询条件要创建索引。如果使用like ‘%’操作,不会使用索引。
3,索引不是越多越好
4,不要在可选值很少的属性上面创建索引
5,MySQL索引的使用,并不是所有情况下都会使用索引,只有当MySQL认为索引足够能够提升查询性能时才会使用;
1.3 索引分类
自动: 当在表上定义一个PRIMARY KEY时,自动创建一个对应的唯一索引.
当在表上定义一个外键时,自动创建一个普通索引;
手动: 用户可以创建索引以加速查询.
在一列或者多列上创建索引.
如果多列在一起,就叫做复合索引;在很多情况下,复合索引比单个索引更好(理解原理即可);
1.4 索引语法
CREATE INDEX index ON table (column[, column]...);
1.5 索引的测试和实战
我们进行1个表中插入数据的实战。
新建数据库,测试用
建表
一开始想用for循环测试插入数据,后来发现for循环不是mysql内置语法,很麻烦,改用while了
之后测试数据,测试插入数据速度,测试查询数据速度
首先测试不加索引
10条数据,执行代码
DELIMITER $$
DROP PROCEDURE IF EXISTS `proc_auto_insertdata`$$
CREATE PROCEDURE `proc_auto_insertdata`()
BEGIN
DECLARE i INTEGER DEFAULT 1;
WHILE i <= 10 DO
insert into stu(stuid,stuname) values(i,CONCAT(‘stuname’,i));
SET i=i+1;
END WHILE;
END$$
DELIMITER ;
CALL proc_auto_insertdata();
一开始打算测试100万数据,后来发现实在太慢,改用1W数据测试-代码不写了,上面的插入sql语句改为10000即可。
接下来测试加入索引的效果-给id加索引测试
#加入索引
# 增加索引
CREATE index stuid on stu(stuid);
测试10数据
1W数据数据
插入貌似没影响,查询呢?
有索引的查询
无索引查询
由此可见,索引的确大幅度的增加了查询的速度。
本日总结:
mysql和oracle要学习的东西真的很多,不是简单的所谓增删改查。
明日任务
好好的把spring,springMvc,Mybatis复习1下
另外,如果时间充裕,把mysql迁移到linux上。
最后,程序员必看的美剧-黑客军团
评论