sql - 索引如何减慢 select 语句的速度?

标签 sql sql-server performance indexing

我很难找到为什么在表的外键上添加索引会减慢我同事的 View 速度。该 View 由多个具有外连接和内连接的打包 View 组成。我试图将它们一一删除以找出问题所在,但我不能说,它似乎不是来自某个特定 View ,而是来自所有 View 。

我知道索引可能会减慢插入速度,或者它们会占用硬盘驱动器的大小,但我从未在任何地方读到它们可能会减慢 View 速度。事实是,当我这样做时:

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
GO

select top 20 * from  MyView

使用索引需要 20 秒,不使用索引则需要 9 秒。

CREATE NONCLUSTERED INDEX [IX_MyField] ON [dbo].MyTable
(
    [MyField] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, 
  IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON,
  ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]

最佳答案

您的其他索引或统计信息可能已过时。如果它们不是最新的,则查询分析器可能正在使用您的新索引选择次优执行计划,因为它认为这会更快。

尝试运行:

使用 (FULLSCAN) 更新统计信息

在你的 table 上。

关于sql - 索引如何减慢 select 语句的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7362299/

相关文章:

sql - 在 SQL Server 中使用嵌套的 XML 节点

Javascript - 在闭包中使用函数构造函数是个坏主意吗?

SQL 触发器编译但出现错误

sql-server - 在 Sql 中连接空值列

java - 如何将 ORDER BY LENGTH(test) DESC 编写为 Criteria 查询?

sql-server - 如何更新在具有超过2.5亿行的表中创建的2个新列

c++ - OpenMP 减慢了计算速度

windows - 在 Windows 系统上移动文件的最快方法

sql - 合并两个不同表的查询结果

sql - MySQL:事务与锁定表