发表于: 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上。


最后,程序员必看的美剧-黑客军团






返回列表 返回列表
评论

    分享到