我有一個包含大量重複字符串數據的大表。爲了節省空間,我將字符串數據移到了一個單獨的表格中。我現在的表看起來是這樣的:如何高效地將記錄與單獨的字符串表聯繫起來
MyRecords
RecordId (int) | FieldA (int) | FieldB (datetime) | FieldC (...) | MyString1Id (int) | MyString2Id (int) | MyString3Id (int) | ...
MyStrings
StringId (int) | StringValue (varchar)
的MyRecords
表中有大約10外鍵的字符串表。我有一個存儲過程GetMyRecords
,它檢索包含實際字符串值的記錄列表。這就是現在SP有10加入到字符串表中的每個字符串關係:
SELECT [Field1], [Field2], [Field3], ..., [Strings1].[StringValue], [Strings2].[StringValue], ...
FROM MyRecords INNER JOIN
MyStrings AS Strings1 ON MyRecords.MyString1Id = Strings1.StringId INNER JOIN
MyStrings AS Strings2 ON MyRecords.MyString2Id = Strings2.StringId INNER JOIN
MyStrings AS Strings3 ON MyRecords.MyString3Id = Strings3.StringId INNER JOIN
(more joins)
WHERE [Field1] = @Field1 AND [Field2] = @Field2
GetMyRecords
是相當慢的,比我想因爲所有的連接。我怎樣才能提高這個sp的性能?我可以以某種方式將它變成單個連接嗎?
字符串表在StringId
上有一個羣集主鍵,並且所有where字段位於MyRecords
表的非聚簇索引中。
你真的應該正常化你的結構,儘管...這不是真正可擴展的,並且會很難維持。 – JNK 2010-11-05 15:13:12