我在Microsoft SQL Server 2008中遇到了一个奇怪的问题。 我有一个大型数据库(20 GB),包含大约10个表,我试图就如何正确地创建索引提出一个观点。SQL Server 2008性能:没有索引与不良索引?
这是我的问题:在一些嵌套查询我得到更快的结果没有使用索引!它接近(一两秒),但在某些情况下,根本不使用索引似乎会使这些查询运行得更快......我正在运行一个Checkpoiunt和一个DBCC dropcleanbuffers来在运行脚本之前重置缓存,米有点失落。
这可能是什么原因造成的? 我知道这样一个事实,即索引构造不好(想想每个相关领域的索引),整点就是要证明正确构建它们的重要性,但它应该比完全没有索引要慢, ?
编辑:这里是有罪的查询之一:
SET STATISTICS TIME ON
SET STATISTICS IO ON
USE DBX;
GO
CHECKPOINT;
GO
DBCC DROPCLEANBUFFERS;
GO
DBCC FREEPROCCACHE;
GO
SELECT * FROM Identifier where CarId in (SELECT CarID from Car where ManufactId = 14) and DataTypeId = 1
标识表: - IdentifierId INT NOT NULL - CarId INT NOT NULL - DataTypeId INT NOT NULL - 别名为nvarchar(300)
车表: - CarId INT NOT NULL - ManufactId INT NOT NULL - (几个领域紧随其后,所有的数据类型为nvarchar(100)
这些项目符号中的每一个都有一个索引,以及一次同时存储其中两个索引的一些索引(例如, CarId和DataTypeId)。
最后,识别符表已超过万个条目,而车表有两三万
感谢所有答案的家伙! 不幸的是,SQL Server认为数据库应该被彻底恢复,所以我很害怕暂时被锁定。 PS:我还删除了“无索引”方法中的主键,但在索引很差的索引中重建了它们 – 2009-06-03 14:58:02