如何优化sql server表以获得更快的响应?

时间:2011-01-01 10:26:17

标签: sql-server-2005

我在一个表中发现有50万条记录,当我们通过发出一个sql从sql server表中获取数据时需要一分钟。有一个主键意味着已经有一个集群索引。我只是不明白为什么需要一分钟。除索引之外,还有哪些方法可以优化表格以更快地获取数据。在这种情况下我需要做些什么来加快响应速度。还告诉我如何编写始终优化的sql。请告诉我优化的所有步骤。

感谢。

4 个答案:

答案 0 :(得分:3)

优化表中索引的最快方法是使用SQL Server Tuning Advisor。看看http://www.youtube.com/watch?v=gjT8wL92mqE< - here

答案 1 :(得分:1)

如果您正在运行select * from employee(根据问题评论),那么没有任何索引可以帮助您。这是一个“每一行的每一行”查询:没有任何魔力。

添加WHERE通常也不会对select *查询有所帮助。

您可以检查的是索引和统计信息维护。你做的吗?这是一个Google search

或者更改您使用数据的方式......

编辑:

为什么WHERE子句通常不起作用......

如果你添加一个不是PK的WHERE ..

  • 除非在搜索列
  • 上添加索引,否则您仍需要扫描表格
  • 然后你需要一个键/书签查找,除非你覆盖
  • 使用SELECT *您需要将所有列添加到索引以使其覆盖
  • 对于多次点击,可能会忽略索引以避免键/书签查找。

除非存在网络问题或类似问题,否则问题是读取所有列缺少WHERE

如果您SELECT col13 FROM MyTable并且col13上有索引,则可能会使用该索引。

SELECT * FROM MyTable WHERE DateCol < '20090101'索引位于DateCol但匹配表的40%,它可能会被忽略,或者您有昂贵的键/书签查找

答案 2 :(得分:1)

仅选择所需的列,而不是选择*。如果您的桌子有一些大的列,例如OLE类型或其他二进制数据(可能用于存储图像等)然后您可能会从磁盘和网络上传输比您需要的更多的数据。

正如其他人所说,当您选择所有行(没有where子句)时,索引对您没有帮助。在这种情况下使用索引会比较慢,因为每行的索引读取和表查找与全表扫描相比。

答案 3 :(得分:0)

无论将整个表格返回到您的应用程序的优点如何,只需要很长时间才能检索到50000行员工数据。

您的查询是ORDER BY还是只是select * from employee

employee表的定义是什么?它是否包含任何特别宽的列?您是否将二进制数据(如简历或员工照片)存储在其中?

您如何发布SQL并检索结果?

运行的select语句有什么隔离级别(可以使用SQL事件探查器来检查)

你遇到阻塞吗?将NOLOCK添加到查询中会显着加快速度吗?