我試圖把一個索引放在一個將保存URL的列上。由於URL的最大長度超過2000個字符,我將數據類型設置爲NVARCHAR(3000)。當我這樣做時,我得到了錯誤The total size of an index or primary key cannot exceed 900 bytes
。由於我可能需要通過URL搜索記錄,因此我需要在我的URL列上使用索引。有沒有辦法解決這個限制?SQL Server:索引或主鍵的總大小不能超過900個字節
回答
您可以爲URL的校驗和創建一個計算列,然後在查詢中使用校驗和。校驗和不是唯一的,但它會迅速縮小可能的匹配數量。
首先,計算列添加到您的表,這樣的:
現在Alter Table YourTableName Add URL_HASH As CheckSum(URL)
指標列如下:
Create Index idx_YourTableName_URL_HASH On YourTableName(URL_HASH)
現在,您可以編寫一個查詢,會做一個索引查找找到你正在尋找的行:
Select URL
From YourTableName
Where URL_HASH = CheckSum(N'google.com')
And URL = 'google.com'
這種方法應該很好地進行精確匹配ES。如果你想部分匹配,你最好使用全文搜索功能。
謝謝我們決定實施這個。 – Luke101
嗨G馬斯特羅斯。感謝您的回答。我有擁有大量數據的Varbinary專欄。此列可以爲空,並且我有查詢,查找該列不爲空的記錄。在這種情況下,您的校驗和方法也很有用。我檢查了可空列的校驗和是2147483647.雖然它可以工作,但在查詢中硬編碼這個數字似乎很奇怪。當我們遷移到其他版本的SqlServer時,這個數字是否會一樣?我曾經在C#中使用GetHashCode方法在腳下拍攝過自己,結果它返回的值取決於操作系統。 – Mariusz
我真的不知道。但是,您可以使用「校驗和(Convert(varbinary,null))」來代替對數字進行硬編碼。然後,如果值隨着db版本而改變,你仍然會受到保護。 –
SQL Server全文搜索是您可能需要的。
http://msdn.microsoft.com/en-us/library/ms142571.aspx
你必須通過一些小的箍帶設置它VS一個簡單的指數跳,但它不應該是超級難。
- 1. 索引或主鍵的總大小不能超過900個字節
- 2. 字符長度中的900字節索引大小限制
- 3. MySql主鍵> 900/1000字節?
- 4. SQL Server的單個索引大小
- 5. Sql Server索引包含主鍵?
- 6. Postgresql部分索引超過最大索引行大小
- 7. 小於或大於sql server中索引的運算符問題
- 8. 如何創建大小超過8000字節的SQL varbinary?
- 9. SQL Server數據庫中最大背後的原因是900字節
- 10. 大型表上的SQL索引:一些大型索引或更小的索引?
- 11. 的SQL服務器到MySQL遷移woes-最大行大小不能超過65535個字節
- 12. 使SQL Server索引爲小數字
- 13. SQL Server中的複合表,主鍵,外鍵和索引
- 14. 索引中單個鍵的大小
- 15. 警告!最大密鑰長度是900字節。該索引的最大長度爲1000字節
- 16. 警告!最大密鑰長度是900字節。該索引的最大長度爲8009字節
- 17. SQL Server過濾索引性能
- 18. 文檔索引大小超過原始大小
- 19. Nexus不會索引Central:前綴文件大小超過最大允許大小
- 20. 「主鍵」關鍵字如何與SQL Server中的聚集索引相關聯?
- 21. 如果我索引一個> 900字節的列,請問這是否重要
- 22. CSS字體粗細超過900?
- 23. SQL Server中正常或索引視圖的行大小是否有字節限制?
- 24. 外鍵索引或不在SQL Server 2008中
- 25. 「大小超過了配置的最大」錯誤而索引
- 26. 在sql server錯誤中最大行大小超過
- 27. 在SQL Server中散列超過8000個字節
- 28. 索引SQL Server複合鍵的各個字段
- 29. SQL Server索引性能
- 30. 從Sql Server FTS索引中刪除不需要的索引關鍵字
這對我來說確實聽起來不是很有效。事實上,這聽起來像是數據庫引擎管理的完整噩夢。你是否確定你*需要通過URL進行搜索,並且這種搜索會變得緩慢?文本搜索可以很快就能知道。也有可能你把URL分成幾個比特,只索引那些比特中的一個(最不同的那個比特),然後把索引部分和整個url聯繫起來。總之,這裏有很多可能的策略。 – Robinson