发表于: 2017-04-07 17:00:16

1 1295


今天完成的事情:


8.将表导出成Sql文件,并使用navciat和Sql分别尝试删除此条数据,并用之前备份的Sql恢复。

9.给姓名建索引,思考一下还应该给哪些数据建索引

10.插入10条数据,查看有索引和无索引的情况下,Sql语句执行的效率

8.中,前一天已经完成前半部分。今天完成sql的恢复,语句如下

LOAD DATA LOCAL INFILE 'D:/jnshu/task01/task01.txt' INTO TABLE task01_student_info

执行后成功导入数据

9.姓名建立索引的语句入下

CREATE INDEX stu_name ON task01_student_info(student_name(5));

CREATE INDEX ol_id ON task01_student_info(online_id(5));

另外为线上id设置了索引,理论上讲id类的属性都应该加索引方便查找,下面的语句实现了查询表中的索引。

SHOW INDEX FROM task01_student_info;

10.为了测试索引的效率,需要使用存储过程创建数据

创建数据存储过程如下:

DROP PROCEDURE IF EXISTS proc1;  

DELIMITER $$  

SET AUTOCOMMIT = 0$$  

CREATE  PROCEDURE proc1()  

BEGIN  

DECLARE v_cnt DECIMAL (5)  DEFAULT 0 ;  

DECLARE v_id CHAR (10)  DEFAULT 1 ;  

dd:LOOP  

 SET v_id = LEFT(UUID(),10);

          INSERT  INTO task01_student_info (student_id,create_at,update_at,student_name,student_type,online_id) 

VALUES (NULL,UNIX_TIMESTAMP(NOW()),UNIX_TIMESTAMP(NOW()),v_id,'java',v_cnt);  

                  COMMIT;  

                    SET v_cnt = v_cnt+1 ;  

                           IF  v_cnt = 1000 THEN LEAVE dd;  

                          END IF;  

         END LOOP dd ;  

END;$$  

DELIMITER ;  

在query窗口中使用CALL proc1();调用存储过程就实现了测试数据的创建。

mysql中使用profiles实现语句执行时间的分析,下面语句中,第一条实现查看profiles的相关属性,第二句实现开启profiles,三四句实现多条与单条的profile(s) 查询

SHOW VARIABLES LIKE "%pro%";

SET profiling = 1;

SHOW profiles;

SHOW profile FOR QUERY 6147;

查看检索时间:
 上图索引为3项时,插入1000条数据的时间为0.022*1000=22秒左右;
查找其中一条数据时花费时间如下
删除stu_name索引后利用student_name查找时间花费如下
 可以看出关闭索引后查找速度从0.000545下降到0.004602,时间几乎增加了10倍,由此可见索引可以显著的提高查找速度


明天计划的事情:由于eclipse与maven都已安装完毕,明天会从15项开始。


遇到的问题:

测试数据的构建、存储过程的使用。查询的相关资料已经转存在个人的博客中

http://blog.csdn.net/yy243/article/details/69567388

http://blog.csdn.net/yy243/article/details/69565118

http://blog.csdn.net/yy243/article/details/69547321

http://blog.csdn.net/yy243/article/details/69542373


收获:初步了解了索引对于查找效率的提高,了解了利用存储过程构建测试数据的方法,了解了uuid()的使用与截取


返回列表 返回列表
评论

    分享到