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
こんにちはマストロス。ご回答有難うございます。私は多くのデータを保持するVarbinaryカラムを持っています。この列はnullでもかまいません。この列がnullでないレコードを検索するクエリがあります。あなたのチェックサムのアプローチはこの場合にも非常に便利です。 nullableカラムのチェックサムが2147483647であることを確認しました。うまくいくかもしれませんが、クエリでこの数値をハードコードするのは変です。この数値は、他のバージョンのSqlServerに移行するときも同じですか?私は一度C#でGetHashCodeメソッドを使用して足で自分自身を撃って、それは戻って別の値を返すOSによって異なります。 – Mariusz
私は確かに分かりません。しかし、数値をハードコーディングする代わりに、 "チェックサム(Convert(varbinary、null))"を使用することができます。 dbバージョンで値が変更されても、それでも保護されます。 –
SQL Serverのフルテキスト検索は、おそらく必要なものです。
http://msdn.microsoft.com/en-us/library/ms142571.aspx
あなたは単純なインデックス対それを設定すると、いくつかのマイナーなフープを介してジャンプする必要がありますが、それは超難しいことではありません。
- 1. 「とValueError:チャンクサイズは寸法サイズを超えることはできませんが、」
- 2. Varchar(max)列はSQL Serverのプライマリキーにはできません
- 3. エラー:配列の合計サイズは、0x7fffffffバイトを超えてはならない。
- 4. 入力フィールドの合計は勘定残高を超えることはできません
- 5. SQL Serverの標準ビューまたはインデックス付きビューの行サイズにはバイト制限がありますか?
- 6. WebSocketClientは、約16kバイトを超えるサイズのメッセージを受信できません。 ConnectionLostExceptionをスローする
- 7. apkをビルドできません:メソッド参照の数は64Kを超えることはできません
- 8. CellListウィジェットの数は25を超えることはできません
- 9. プライマリキーは常にSQL Serverでインデックスされますか?
- 10. SQL Serverユーザーに変更することはできません
- 11. Nexusはセントラルをインデックスに登録しません。プレフィックスファイルのサイズが最大許容サイズを超えています
- 12. SQL Serverで8000バイトを超えるハッシュ処理
- 13. CloudKitに100を超えるレコードを含めることはできません
- 14. サイズが1MBを超えるファイルはアップロードできません - PHPウェブサーバ
- 15. 私はtmpfsのサイズを超えて実行することができます
- 16. は、Microsoft SQL Serverデータツールをインストールすることはできません
- 17. SQL Server:サブクエリーの問題900
- 18. パンダシリーズは、インデックスを取得することはできません
- 19. VarChar(50)のSQL Serverインデックス - このフルテキストは?または何?
- 20. 〜1MBを超えるサイズのOleDbでxlsxファイルを読み取ることができません
- 21. Sql Server 2008 FullTextはバックグラウンドでインデックスを作成しません。
- 22. インデックスを削除することはできません
- 23. Kubernetesは1MBを超えるファイルをアップロードできません
- 24. SQL Serverでこのクエリをチューニングまたは書き換える方法は?
- 25. SQL ServerでSQL Serverエージェントを見つけることができません
- 26. SQL ServerでROW_NUMBER()でエイリアスを使用することはできませんか?
- 27. SQL Serverのエラー: "空のオブジェクトまたは列名を使用することはできません"
- 28. JDBC:コミットされたデータのサイズをバイト単位で取得することはできません
- 29. ページネーションは投稿を超えません。
- 30. 連合またはSQL Server
これは本当に私にとって非常に効率的に聞こえません。実際、それは管理するDBエンジンの完全な悪夢のように聞こえる。 URLで検索する必要があることを確立しましたか?この検索は遅くなるでしょうか?テキスト検索は、かなり素早く知ることができます。また、URLをビットに分割し、それらのビットのうちの1つのみ(最も変化の大きいビット)にインデックスを付けて、そのインデックス部分をURL全体に関連付けることもできます。要するに、ここには多くの戦略があります。 – Robinson