2011-04-24 49 views
0

我在這裏面臨一個SQL語句的問題,該語句根據類別從新表中提取數據: 新聞:Id(PK)int,標題字符串,主題字符串,Uid int,Cid int。
與使用WHERE子句相關的性能問題

SELECT Id, Subject, Uid, Title FROM News WHERE Uid = @Uid 

這種說法慢慢地進行操作比較不聲明WHERE因爲它應該去檢查每一行,以確保它是否完成的條件。

所以想象一下與1000000條新聞。我應該怎麼處理這樣的事情?

回答

4

如果Id列是可能已經聚集的主鍵(它們是默認值),那麼您只需要在Uid列上創建非聚集索引 - 特別是Uid列是唯一標識符(GUID)數據類型。

這可以通過運行下面的SQL創建:

CREATE非聚集索引IX_News_Uid對新聞 ( 的Uid )

+0

以及如何!?我一直在閱讀關於這個的文章,解決方案是通過實現一個T-SQL查詢來創建非聚集索引,但我不知道在哪裏寫這個查詢! – 2011-04-25 16:22:06

+0

我現在編輯了我的原始答案,以包含SQL來創建非聚集索引。注意:格式是創建非專用索引 ON (<列在索引>)。 – 2011-04-25 23:08:24

0

應該可以在Uid列上創建clustered index。這應該會提高性能。注意:每個表只能有一個聚簇索引列。

+1

還是非聚集索引將被罰款/更好,因爲它只是找了一個單記錄和配置項更適合用於範圍查詢。 – 2011-04-24 18:59:21

+0

每個表只能有一個聚簇索引嗎? – 2011-04-24 18:59:36

+0

@Chad - 是的。所以OP可能已經有一個PK,除非他們明確地創建了非聚集。 – 2011-04-24 19:01:24

0

我會在Uid上創建一個唯一索引。

1

你應該創建一個索引的列Uid,與IdSubjectTitle爲包含的列。

這樣數據庫就可以只使用索引運行查詢,而且根本不必觸摸表。

+0

你是什麼意思創建索引!非聚集索引? – 2011-04-25 16:17:04

+0

@Israa Adb:是的。聚集索引不能包含列。 – Guffa 2011-04-25 23:42:10