我在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