首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java的大型SQL数据集查询

使用java的大型SQL数据集查询
EN

Stack Overflow用户
提问于 2011-10-05 14:54:53
回答 5查看 1.6K关注 0票数 0

我有以下配置:

  • Server 2008
  • Java作为后端技术- Spring + Hibernate

基本上,我想做的是在表上使用where子句的select。问题是表有大约7亿个条目,查询需要很长时间。

您能指出一些关于在哪里优化查询或者我可以使用什么样的技术来提高性能的指针吗?

谢谢。

EN

回答 5

Stack Overflow用户

发布于 2011-10-05 14:58:10

使用索引是解决这一问题的标准技术。按照要求,下面是一些应该让您开始学习的提示:

  • http://odetocode.com/articles/70.aspx
  • http://www.simple-talk.com/sql/learn-sql-server/sql-server-index-basics/
  • http://www.petri.co.il/introduction-to-sql-server-indexes.htm
票数 1
EN

Stack Overflow用户

发布于 2011-10-05 15:03:56

在这种情况下,我要做的第一件事是隔离出我返回的数据量是否是问题所在( i/o问题)。一种简单的非科学方法是将查询更改为只返回计数:

代码语言:javascript
复制
select count(*) --just return a count, no data!
from MyTable
inner join MyOtherTable on ...
where ...

如果运行得非常快,它会告诉您索引是有序的(假设您的WHERE子句中没有子选择)。如果没有,则需要索引工作WHERE子句或查询构造本身(连接正在完成等)。

一旦这是令人满意的,添加回您的SELECT子句。如果速度慢,则必须查看您的数据访问模式:

  • 你能返回更少的列吗?
  • 你能一次返回更少的行吗?
  • 您可以在应用层中进行缓存吗?
  • 这个查询是分区/物化视图的候选对象(如果数据库支持这些视图的话)?
票数 1
EN

Stack Overflow用户

发布于 2011-10-05 15:15:15

我会运行Profiler来查找正在生成的确切查询。ORM可以创建少于最优的查询。一旦知道了查询,就可以在SSMS中运行它,并查看执行计划。这将为你提供关于你哪里有性能问题的线索。

有几件事情可能导致性能问题:

  • 缺少正确的索引(如果您有联接以及where子句中的条件,则应该对外键进行索引)
  • where子句中缺乏sarg性,迫使查询不使用现有索引
  • 返回比所需列更多的列
  • 相关子查询和标量函数,它们会导致逐行操作。
  • 返回太多的数据(是否有人真的在查看返回的100万条记录?)您只想返回页面上显示的数量,而不是整个可能的记录集)
  • 锁定和阻塞

还有更多的(在写了很长的书之后,这个主题),但这应该足以让你开始在哪里看。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7663320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档