(一)优化查询
在查询过程中使用索引,势必会提高数据库查询效率,应用索引来查询数据库中的内容,可以减少查询的记录数,从而达到查询优化的目的。
1、当直接分析查询语句时
explain select * from studentof where name=‘mrsoft’;
根据显示出的运行结果可知,在执行查询的过程中,数据库把存在的数据都查询一遍,这样在数据存储量小的时候还好,但在数据存储量大的时候,用户为了搜索一条数据而遍历整个数据库中的所有数据,会耗费非常多的时间。
2、现在,在name字段上建立一个名为index_name 的索引。创建索引的代码如下:
create index index_name on studentof(name);
3、创建索引完毕之后再分析查询语句
explain select * from studentof where name=‘mrsoft’;
从运行结果中可以看出访问的行数为1,所用的索引是index_name.
(二)优化数据库结构
- 将字段很多的表分解成多个表
有些表*(一个表)*在设计时设置了很多的字段,然而有些字段的使用频率很低,则可以通过把这些使用频率低的字段分解出来到一个新的表。例如一个学生表中含有学生基本信息和学生备注信息,则可以分解出一个表,取名为student_extra,表中存储两个字段,ID和extra。
如果需要查询某个学生的备注信息,可以用学号(ID)来查询,
如果需要将学生的学籍信息和备注信息同时显示出来,可以将student表和student——extra表进行联表查询:
select * from student,student_extra where student.id=student_extra.ID;
通过这种分解,可以提高student表的查询效率。因此,遇到这种字段多的,而且有些字段使用不频繁的,可以听过这种分解方式来优化数据库的性能
- 增加中间表
有时需要经常查询某两个表中的字段,如果经常进行联表查询,会降低MySQL查询速度,此时,可以将经常需要同时查询哪几个表中的哪些字段,然后将这些字段建立一个中间表,并插入数据,之后就可以使用中间表来进行查询和统计。例如:
经常要查询学生的学号、姓名、成绩,在此情况下可以创建一个tem_score表,里面存储ID、name、grade三个字段。
create table temp_score(id int not null,
name varchar(20) not null,
grade float);
然后从student表和score表中将记录导入到temp_score表中:
insert into temp_score select student.id,student.name,score.grade from student,score where student.id=score.id;
插入后就可以直接从temp_score表中查询学生的学号、姓名、成绩。这样省去进行表连接操作,提高数据库查询速度。
- 优化插入记录的速度
插入记录时,索引、唯一性校验都会影响到插入的速度,所以进行入操作时一般禁用索引,禁用唯一性检查
禁用索引
alter table 表名 disable keys;
重启索引
alter table 表名 enable keys;
禁用唯一性检查
set unique_check=0;
重启唯一性检查
set unique_check=1;