我有以下配置:
基本上我想要做的是在表上使用where子句的select。问题是该表有大约700M条目,查询需要很长时间。
您能否指出一些关于优化查询的地方的指示,或者我可以使用哪种技术来提高性能?
感谢。
答案 0 :(得分:1)
使用索引是用于解决此问题的标准技术。根据要求,以下是一些可以帮助您入门的指示:
答案 1 :(得分:1)
在这种情况下我做的第一件事是隔离是否是我返回的数据量是否是问题(i / o问题)。一种简单的非科学方法是将查询更改为仅返回计数:
select count(*) --just return a count, no data!
from MyTable
inner join MyOtherTable on ...
where ...
如果运行速度非常快,它会告诉您索引是否正常(假设WHERE
子句中没有子选择)。如果没有,那么您需要work on indexes,WHERE
子句或您的查询构造本身(JOIN正在完成等)。
一旦满意,请在SELECT
子句中添加。如果它很慢,您将不得不查看您的数据访问模式:
答案 2 :(得分:1)
我会运行Profiler来查找正在生成的确切查询。 ORM可以创建不太理想的查询。一旦知道了查询,就可以在SSMS中运行它并查看执行计划。这将为您提供有关性能问题的线索。
可能导致性能问题的几件事情:
还有更多(毕竟很长的书都写在这个主题上)但这应该足以让你开始在哪里看。
答案 3 :(得分:0)
您应该为经常用来限制结果的列提供一些索引。另一件事是结果集的分页。
答案 4 :(得分:0)
无论具体的数据库如何,我都会执行以下操作: