最近在研究mysql,看了许多资料,但都没有在大量数据中的实战,正好电脑里面还有之前做过助学网的库表(替学校做的实际项目),于是兴起准备找些东西来练手。
有如下三张表,
学生基本信息表A(31959行数据,大概有30个字段,为了简单起见,就只列出3个字段了)
create table A(
student_id bigint primary key,
academy varchar(20),
name varchar(10)
);
贫困生申请表B(12402行数据,大概有40个字段,为了简单起见,就只列出4个字段了)
create table B(
id int primary key,
student_id bigint,
annual varchar(10),
info1 text
);
勤工俭学信息表B(1161行数据,大概有20个字段,为了简单起见,就只列出4个字段了)
create table C(
id int primary key,
student_id bigint,
annual varchar(10),
info2 text
);
现需要查询拥有申请“国家助学金”资格的学生的信息,即既有申请贫困生,又有勤工俭学的学生的信息。
语句如下:
SELECT * FROM A join B using(student_id) join C using(student_id);
结果竟然跑了109秒,这不能忍,如果是学校进行办公,那还了得!
于是在表B和表C建立索引,语句如下
alter table B add key(student_id);
alter table C add key(student_id);
然后再跑同样的查询语句,结果时间不到1s,果断整整降低了两个数量级!索引果然是个好东西!
总结:在日常的数据库查询过程中,索引是个“神器”,有效利用索引,能够轻松将查询时间降低几个数量级。其实mysql还有很多的优化手段,就单单把索引讲好讲透彻,恐怕100篇这样的博客都不够。