對於每個唱片我都會問,「這有多獨特?」然後開始基於邏輯分解...
狀態:具有潛在大量複製的低唯一數據集;創建一個帶有標識列的[State]表,並且如果可能的話,預填充所有可能的值以減少非聚集索引上的索引碎片。
Create Table [dbo].[State] (StateID Int Identity, StateName Varchar(32))
Create Unique Clustered Index ix_stateID On [dbo].[State] (StateID)
Create Unique NonClustered Index ix_SN On [dbo].[State] (StateName)
ZipCode:具有適當重複性的中等獨特數據集,但每個ZipCode都與單個狀態關聯。再次,預填充這個可能對於避免漸進式索引碎片很有用,但取決於您期望這種增長速度有多快,只需讓它填滿即可,並定期重新索引,這可能是有意義的。如果您只追蹤美國地址,並且只有前五位數字預先填充(如果您正在執行此操作,請將ZipCode列更改爲Int)。
Create Table [dbo].[ZipCode] (ZipCodeID Int Identity, StateID Int, ZipCode Varchar(16))
Create Unique Clustered Index ix_zipcodeID On [dbo].[ZipCode] (ZipCodeID)
Create Unique NonClustered Index ix_stateID_ZC On [dbo].[ZipCode] (StateID, ZipCode)
市:此表將有一個體面的大型數據集,但仍然有重複噸,所以我們會再次創造一個身份價值的機會,但是這一次我絕對不會預填充。
Create Table [dbo].[City] (CityID Int Identity, ZipCodeID Int, CityName Varchar(64))
Create Unique Clustered Index ix_cityID On [dbo].[City] (CityID)
Create Unique NonClustered Index ix_zipcodeID_C On [dbo].[City] (ZipCodeID, City)
的StreetAddress:這是選擇性的,因爲我們會得到與出地址,但我們仍然要創建一個ID列,因爲我們可以從同一地址接收郵件噸的。
Create Table [dbo].[StreetAddress] (StreetAddressID Int Identity, CityID Int, StreetAddress Varchar(256))
Create Unique Clustered Index ix_streetaddressID On [dbo].[StreetAddress] (StreetAddressID)
Create Unique NonClustered Index ix_cityID_SA On [dbo].[StreetAddress] (CityID, StreetAddress)
的電話號碼,我可能會打破它由[AREACODE]和[******中國]所以...
Create Table [dbo].[AreaCode] (AreaCodeID Int Identity, AreaCode Int)
Create Unique Clustered Index ix_areacodeID On [dbo].[AreaCode] (AreaCodeID)
Create Unique NonClustered Index ix_AC On [dbo].[AreaCode] (AreaCode)
Create Table [dbo].[PhoneNumber] (PhoneNumberID Int Identity, AreaCodeID Int, PhoneNumber Int)
Create Unique Clustered Index ix_phonenumberID On [dbo].[PhoneNumber] (PhoneNumberID)
Create Unique NonClustered Index ix_acID_PN On [dbo].[PhoneNumber] (AreaCodeID, PhoneNumber)
那麼對於剩下的我會創造一個深入查找表(尺碼,顏色,字體等)
Create Table [dbo].[Characteristic] (CharacteristicID Int Identity, Characteristic AppropriateDataType)
Create Unique Clustered Index ix_characteristicID On [dbo].[Characteristic] (CharacteristicID)
Create Unique NonClustered Index ix_abrevCharact On [dbo].[Characteristic] (Characteristic)
後來終於有你最獨特的項目,您的郵件...
Create Table [dbo].[Letter] (LetterID Int Identity, Received DateTime, StreetAddressID Int, PhoneNumberID Int, CharacteristicIDs ...)
根據您最常運行的查詢,找出[dbo]。[Letter]表上哪些索引是有意義的,高效的查詢應該像使用必要的連接和邏輯編寫適當的查詢一樣簡單。 :)
這是我的2美分。