关于数据库性能优化小经验

最近做的公司的项目,主要负责和移动端交互后台,有一个接口返回时间7 秒,一个20 秒;项目结构是springMVC 和hibernate ,hibernate觉得查询多还可以,但是添加删除更新多,又是 夺标关联,映射,就很慢了;这是慢的一个小原因;

现在说一个接口 ,answer 表  ,录音表 ,会有很多录音; 评论表 answer_comment,对录音的评论,关联字段 answer_id ; 一条录音有多条评论,

第一个接口;查录音answer表, 把 所有没被评论的分页查询出来按时间排序, 实现是这样, 把 所有的common的表 answer_id  去拿出来,和answer表比较,

以前的sql : select * from answer a where a.id not in(select b.answer_id from answer b)  and a.....

没有的查出来,如果数据量小,可以接受,现在线上 数据,录音多,评论也多,这种时间负责度 为n  的平方,就会特别慢,我用exists 替换了in ,不行,加了索引也不行,

解决办法:answer表加个 字段是否已 被评论 flag ,先把 线上数据用sql更新  update answer a set a.isComment=1 where EXISTS(select 1 from  answer_comment b where b.answer_id=a.id);

然后程序Java控制,如果有评论,就把那条录音isComment 更新为1 ,这样查询 就是单表查询,不会有关联了 ,时间 复杂度为1 ;sql :select a from answer a where a.isComment=1;

第二个接口:返回高分录音  同样是answer 表, answer_Comment , 用户对录音的点评 分为四个维度存在 answer_Comment ,高分录音是4 个维度求和 大于3 的算高分;

之前的sql:select *  from answer a    group by a.id   having a.id in (select  c. answer_id  avg(c.1+c.2+c.3+c.4) >3 from answer_Comment c  )    and a.sum(secounds)>100  这里也是求和 和in 执行时间很慢

大约20 秒了,当我接受这个项目的时候,添加索引 或者基本的sql优化也回力无天,这里又是 计算,又是in ;

解决 办法,还是添加字段,但是这个 计算是实时 的,多了一条评论, 积分 就会改变 ,这里应为 才用了存储过程,每天晚上去统计计算情况在answer表加一个字段 , 平均分, 更新后,类似于第一个接口 ;

=====================================================================================================================

其实sql 优化那些查询,网上那些办法,什么查询结果需要的字段啊 ,加索引啊,都是空话,我觉得关键在于表的设计 ,尽量减少多表交互太多, 当然不是单表;

时间: 2024-10-17 22:08:13

关于数据库性能优化小经验的相关文章

SQL Server数据库性能优化之SQL语句篇(转载)

SQL Server数据库性能优化之SQL语句篇 原文地址:http://www.blogjava.net/allen-zhe/archive/2010/07/23/326927.html 期项目需要,做了一段时间的SQL Server性能优化,遇到了一些问题,也积累了一些经验,现总结一下,与君共享.SQL Server性能优化涉及到许多方面,如良好的系统和数据库设计,优质的SQL编写,合适的数据表索引设计,甚至各种硬件因素:网络性能.服务器的性能.操作系统的性能,甚至网卡.交换机等.这篇文章主

SQL Server数据库性能优化之SQL语句篇

SQL Server数据库性能优化之SQL语句篇 近期项目需要,做了一段时间的SQL Server性能优化,遇到了一些问题,也积累了一些经验,现总结一下,与君共享.SQL Server性能优化涉及到许多方面,如良好的系统和数据库设计,优质的SQL编写,合适的数据表索引设计,甚至各种硬件因素:网络性能.服务器的性能.操作系统的性能,甚至网卡.交换机等.这篇文章主要讲到如何改善SQL语句,还将有另一篇讨论如何改善索引.如何改善SQL语句的一些原则: 1. 按需索取字段,跟“SELECT *”说拜拜

mysql数据库性能优化(包括SQL,表结构,索引,缓存)

优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段.降低 CPU 计算除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了.order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算).当我们的 IO 优化做到一定阶段之后

SQL Server数据库性能优化之SQL语句篇【转】

SQL Server数据库性能优化之SQL语句篇http://www.blogjava.net/allen-zhe/archive/2010/07/23/326927.html 近期项目需要, 做了一段时间的SQL Server性能优化,遇到了一些问题,也积累了一些经验,现总结一下,与君共享.SQL Server性能优化涉及到许多方面,如良好的系统和数据库设计,优质的SQL编写,合适的数据表索引设计,甚至各种硬件因素:网络性能.服务器的性能. 操作系统的性能,甚至网卡.交换机等.这篇文章主要讲到

MySQL数据库性能优化及自动化运维实践教程!DBA日常工作

MySQL数据库性能优化及自动化运维实践教程!本文作者将站在更加全面的角度分享他在这一年多 DBA 工作中的经验,希望可以给大家带来启发和帮助. DBA 的日常工作 我觉得 DBA 真的很忙,我们来看看 DBA 的具体工作:备份和恢复.监控状态.集群搭建与扩容.数据迁移和高可用. 上面这些是我们 DBA 的功能,了解这些功能以后要对体系结构有更加深入的了解,你不知道怎么处理这些故障和投诉的事情. 所以我们要去了解缓存/线程.SQL 优化.存储引擎.SQL 审计以及锁与实务:体系结构更深一点,就去

架构设计:系统存储(8)——MySQL数据库性能优化(4)

================================ (接上文<架构设计:系统存储(7)--MySQL数据库性能优化(3)>) 4-3.InnoDB中的锁 虽然锁机制是InnoDB引擎中为了保证事务性而自然存在的,在索引.表结构.配置参数一定的前提下,InnoDB引擎加锁过程是一样的,所以理论上来说也就不存在"锁机制能够提升性能"这样的说法.但如果技术人员不理解InnoDB中的锁机制或者混乱.错误的索引定义和同样混乱的SQL写操作语句共同作用,那么导致死锁出现的

架构设计:系统存储(9)——MySQL数据库性能优化(5)

=================================== (接上文<架构设计:系统存储(9)--MySQL数据库性能优化(5)>) 4-3-3-3.避免死锁的建议 上一篇文章我们主要介绍了MySQL数据库中锁的基本原理.工作过程和产生死锁的原因.通过上一篇文章的介绍,可以确定我们需要业务系统中尽可能避免死锁的出现.这里为各位读者介绍一些在InnoDB引擎使用过程中减少死锁的建议. 正确使用读操作语句 经过之前文章介绍,我们知道一般的快照读是不会给数据表任何锁的.那么这些快照读操作

数据库性能优化一:SQL索引一步到位

SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间 下面举两个简单的例子: 图书馆的例子:一个图书馆那么多书,怎么管理呢?建立一个字母开头的目录,例如:a开头的书,在第一排,b开头的在第二排,这样在找什么书就好说了,这个就是一个聚集索引,可是很多人借书找某某

关系型数据库性能优化总结(转)

关系型数据库性能优化总结 作者: 刘晓军  来源: 博客园  发布时间: 2010-12-12 21:09  阅读: 2763 次  推荐: 1   原文链接   [收藏] 摘要:今天我们要讨论的是关系型数据库性能优化的问题,平时我们也最好要遵守一定的规则,希望对大家有所帮助. 对于web应用开发,多数性能瓶颈均出现在数据库上,除了采用分布式架构或云处理(大公司基本上都是),更重要的是平时程序设计时要遵照一些规则,从根本上提高系统的性能,以下总结了一些常用的规则方法,仅供参考,欢迎跟帖补充...