MySQL索引优化

(一)优化查询

在查询过程中使用索引,势必会提高数据库查询效率,应用索引来查询数据库中的内容,可以减少查询的记录数,从而达到查询优化的目的。
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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值