sql查询

BXS_null 程序员  2018-08-31 12:12:54
一个很长的sql链表查询非常吃cpu,有没有什么解决办法?
...全文
444 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
百合杰 2018-10-23
引用 7 楼 weixin_40068689 的回复:
[quote=引用 6 楼 kobehahaha 的回复:] 更新这么快的数据应该不用查很久前的数据了吧 分页了吗
分页了,但是这个分页是先把所有数据查询出来[/quote]我是指数据库分页。。。
回复
比如说你的一个地方负责更新数据库某个(某些)重要数据,此地你设计一个缓存单元叫做“xxxx最后更新时间”。 然后你有一个复杂的 sql 查询,你将结果放到另一个缓存单元中(以这个 sql 语句为缓存单元的 key),并且设计此缓存单元的 CacheDependency 是依赖于“xxxx最后更新时间”那个缓存单元的。假设你的复杂的计算过程中有许多出都需要这个复杂 sql 查询结果,甚至你根本不知道将来还有哪些地方需要重复查询,那么你就不需要预先知道具体哪些地方需要复用这个查询结果,只要把结果放入高速 cache 中就行了。而其它地方就是直接调用这个 sql 查询——以这个 sql 查询为 key 查询缓存,如果存在缓存就直接使用结果,如果不存在才查询数据库并且重建这个缓存单元。 但是因为这个缓存单元是依赖与“xxxx最后更新时间”的,那么一旦那个缓存单元的值改变了,级联地,这个 sql 为 key 的缓存单元也就自动清除了。这样就保证了清除脏数据。
回复
引用 1 楼 weixin_40068689 的回复:
能不能说把查询的数据存放在一个静态的地方,然后下次查询就直接从这个静态的地方拿。 但是数据更新很快,有没有什么办法
我前两年回过一个帖子。https://bbs.csdn.net/topics/391977245其中我举了类似的例子,缓存技术的核心并不是把什么结果放到内存,而是设计 CacheDependency 能够保证缓存单元高速地失效。 懂得如何清除脏数据,才是真正的缓存技术。
回复
丰云 2018-09-03
知道什么叫预先缩小范围吗?
通过子查询缩小范围,是解决这类耗时查询的一个利器
回复
BXS_null 2018-09-03
引用 6 楼 kobehahaha 的回复:
更新这么快的数据应该不用查很久前的数据了吧 分页了吗

分页了,但是这个分页是先把所有数据查询出来
回复
百合杰 2018-09-03
更新这么快的数据应该不用查很久前的数据了吧 分页了吗
回复
BXS_null 2018-08-31
Application 是怎么用 我是不是可以把查询出来的数据放在 Application["我的数据"]里面。Application是跟缓存一样的吗
回复
BXS_null 2018-08-31
能不能说把查询的数据存放在一个静态的地方,然后下次查询就直接从这个静态的地方拿。
但是数据更新很快,有没有什么办法
回复
BXS_null 2018-08-31
引用 4 楼 hanjun0612 的回复:
有没有索引,
先看执行计划,
具体语句优化要看具体sql

有一个表and_partner_syn_log之前备份过数据,但是现在网页上查询需要查询那个表的数据,所以就跟现在用的的表union all连表查询,这样查的时候Cpu直接跑到八十多九十多了,我去掉连表查询,只查现在运行的表就只有20多三十多
回复
正怒月神 2018-08-31
有没有索引,
先看执行计划,
具体语句优化要看具体sql
回复
圣殿骑士18 2018-08-31
1、优化设计
2、优化sql
回复
相关推荐
发帖
非技术区
创建于2007-09-28

7701

社区成员

.NET技术 非技术区
申请成为版主
帖子事件
创建了帖子
2018-08-31 12:12
社区公告
暂无公告