数据库查询优化初级方案

 本文是小菜鸟的日常流水笔记,技术大神可以绕路啦,也欢迎点评指正,(#^.^#)...

今天在维护一个百万数据级别的表的时候,发生了查询速度慢的问题,一个页面的打开时间需要好几秒,而且查询语句比较简单,就两个条件:①table.clumn1>0; ②table.clumn2 = Y (取值只有两个,一个是N,一个是Y)。

即select * from table t where t.clumn1>0 and t.clumn2 = 'Y' ;

首先得找出查得慢的原因,该查询语句没有关联其他表,查询逻辑也是比较简单的,所以造成查询速度的原因是单表的数据量太大了,查询比较耗时。

建立索引,这时候思考,加索引的字段需要满足什么条件,一般比较固定且不经常变动的字段可以考虑加上索引,索引相当于给字段里面的数据项按照索引项进行了隐形排序,相当于为字段提供了目录。由于clumn1需要经常改变其值,加索引的话维护起来开销比较大,故考虑将clumn2的字段加上索引,因为其变动不是特别频繁。以下列出创建和删除索引的SQL语句:

创建索引:CREATE INDEX index_name ON table_name(clumn1) ;

删除索引:DROP INDEX index_name On table_name ;

加上索引之后,页面查询速度相对于之前快了很多,确实可行。在查询语句的书写上也进行了改进,由于clumn1是整数,故将条件table.clumn1>0 改成 table.clumn1>=1 ,这是由于数据库查询的时候可以让字段直接跟1比,不用再去查询大于0的整数是多少再来比较,如此优化也是有点效果的。

以上是普通索引的建法,此外还有非空索引、主键索引,按照存储特点还分为聚簇索引和非聚簇索引。索引的数据结构也比较有趣,如MyISam和InnoDB都选用了B+Tree作为数据结构,日后有机会再进行学习探讨。

数据库查询优化的方案除了加索引之外,还有其他很多方法,如对数据库进行分表分库(需考虑数据一致性问题)、分页、尽量不要全表扫描、尽量不要写进行运算的sql等等。遇到相应的问题再来记录分享学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值