問題タブ [newsequentialid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 既存のテーブルで newid() を newsequentialid() に変更する
現在、主キーに newid() を使用しているテーブルがいくつかあります。これにより、大量の断片化が発生しています。そのため、代わりに newsequentialid() を使用するように列を変更したいと思います。
既存のデータはかなり断片化されたままになると思いますが、新しいデータは断片化が少なくなります。これは、PK インデックスを非クラスター化からクラスター化に変更する前に、しばらく待つ必要があることを意味します。
私の質問は、これを行った経験がある人はいますか? 気をつけなければならないことを見落としていることはありますか?
sql-server - Sequential Guidの主キー列はクラスター化インデックスである必要がありますか?
シーケンシャルGUIDを使用する目的は、通常のGUIDの場合にクラスター化インデックスに通常存在する高レベルの断片化なしに、クラスター化インデックスを使用できるようにすることです。
sql-server-2008 - シーケンシャル GUID の SSIS を使用してデータをインポートする方法は?
PK がシーケンシャル GUID であると予想される SSIS にデータをインポートする方法はありますか?
これまでに思いついた唯一の方法は、列がデフォルトnewsequentialid()
でそこにデータをロードし、それを正しいテーブルにコピーする一時テーブルを作成することです。これはあまりエレガントではなく、これに対応するためにパッケージに多数のレイヤーを追加する必要があるため、多少時間がかかります。
sql-server - UPDATEトリガーでNEWSEQUENTIALID()を使用する
テーブルに新しいGUID/Uniqueidentifier列を追加しています。
また、テーブルのレコードが更新されるたびに、この列「VersionNumber」を更新したいと思います。だから私は新しいトリガーを作成します
しかし、NEWSEQUENTIALID()はCREATE TABLE
またはでのみ使用できることに気づきましたALTER TABLE
。このエラーが発生しました
これに対する回避策はありますか?
編集1:トリガーでに変更NEWSEQUENTIALID()
するNEWID()
とこれは解決しますが、この列にインデックスを付けているため、使用NEWID()
するのは最適ではありません
sql - PK が指定されている場合または指定されていない場合に SQL Insert を機能させる
次のストアド プロシージャがあります。
ServerEnvironmentId 列は、(newsequentialid()) であるデフォルトが設定された主キーです。
2 つのシナリオで機能するには、このストアド プロシージャが必要です。
- ServerEnvironmentId - WORKS に指定された値。
- ServerEnvironmentId に値が指定されていません - 機能しません - NULL 値を挿入できません。この列にデフォルトを設定することで、これで問題ないと思いました。
両方のシナリオで機能するように、誰かがこの手順を修正するのを手伝ってください. 現在、すべての SP がこの傾向に従っているため、ソリューションには最小限の変更が必要です。
sql-server - NEWSEQUNETIALID()列のデフォルトを使用するSQL挿入を簡素化する
次の挿入ストアドプロシージャがあります。
上記を次のように簡略化できます。
しかし、そうすることで、パフォーマンスの向上が失われます。コードで設定することはできませんnewsequentialid()
。テーブルの列レベルでデフォルト値としてのみ提供できます。newid().
newsequentialid()
newid()
元のクエリを単純化することについて誰かがアイデアを持っていますが、それを利用していnewsequentialid()
ますか?または、元のクエリはこれを達成するための最も単純化されたソリューションですか?
c# - EFでのGUIDCOMB戦略
CodeFirstデザインを使用して、新しいEntityFramework4.1のオブジェクトにGuidCOMBID戦略を実装する方法はありますか?設定は機能すると思いましたStoreGeneratedPattern
が、それでも通常のGUIDが得られます。
sql-server - UniqueIdentifier クラスター化インデックスの NewSequentialId
私は、会社が開始する新しいデータベースのデータベース標準に取り組んでいます。定義しようとしているものの 1 つは、UniqueIdentifiers に関連する主キーとクラスター化インデックスのルールです。
(注: UniqueIdentifier を主キーまたはクラスター化インデックスとして使用することの長所と短所についての議論は望んでいません。それに関する情報はウェブ上に山ほどあります。これはその議論ではありません。)
だからここに私が心配しているシナリオがあります:
クラスター化インデックスと主キーとして UniqueIdentifier を持つテーブルがあるとします。それをColAと呼びましょう。ColA のデフォルト値を NewSequentialId() に設定しました。
その NewSequentialId() を使用して、3 つの連続した行を挿入します。
{72586AA4-D2C3-440D-A9FE-CC7988DDF065}
{72586AA4-D2C3-440D-A9FE-CC7988DDF066}
{72586AA4-D2C3-440D-A9FE-CC7988DDF067}
次に、サーバーを再起動します。NewSequentialIdのドキュメントには、「Windows を再起動した後、GUID はより低い範囲から再開できますが、依然としてグローバルに一意です」と記載されています。
そのため、次の開始点は前の範囲よりも低くなる可能性があります。
したがって、再起動後、さらに 3 つの値を挿入します。
{35729A0C-F016-4645-ABA9-B098D2003E64}
{35729A0C-F016-4645-ABA9-B098D2003E65}
{35729A0C-F016-4645-ABA9-B098D2003E66}
(GUIDがデータベースでどのように表現されているか正確にはわかりませんが、これは3で始まり、前のものは7で始まっているため、3のものは7のものよりも「小さい」と仮定しましょう。)
クラスター化インデックスの途中で挿入を行う場合、インデックスの再マッピングが発生する必要があります。(少なくとも、私の DBA はそう教えてくれました。) そして、再起動するたびに、新しい UniqueIdentifier 範囲が他の以前の範囲のちょうど真ん中にあるというリスクを冒します。
だから私の質問は次のとおりです: UniqueIdentifiers の次のセットは最後のセットよりも小さいため、すべての挿入によりクラスター化インデックスがシャッフルされますか?
そうでない場合、なぜですか?SQL Server は NewSequentialId を使用していることを認識していますか? それを補う方法はありますか?
そうでない場合、次に何を挿入するかをどのように知るのでしょうか? 次の 100 万回の挿入は 3 から始まるかもしれません。あるいは、7 から始まるかもしれません。
それとも、それを知らず、すべてを整理しているだけですか。その場合、1 回の再起動がパフォーマンスに大きな影響を与える可能性があります。(これにより、再起動の影響を受けない独自のカスタム NewSequentialId が必要だと思います。)それは正しいですか?それとも、私が気付いていない魔法がありますか?
編集:クラスター化されたインデックスとしての GUID は、私の標準では強く推奨されていません。上で述べたように、これが悪い考えである理由はたくさんあります。これが別の理由であるかどうかを調べようとしています。
sql-server-2008-r2 - ストアドプロシージャ(SQL Server 2008 R2 SP2)で、一時テーブル変数なしでNewSequentialID()を返すことは可能ですか?
NewSequentialID()
ストアドプロシージャ(SQL Server 2008 R2 SP2を使用)で、一時テーブル変数なしでを返すことは可能ですか?
NewSequentialID()
一時テーブルを使用して、を正常に取得できます。
おそらく私は古い学校ですが、絶対に必要な場合を除いて、一時テーブルの使用は控えるようにしています…これは絶対に必要な場合かもしれませんが…</ p>
私が試してみると:
…期待どおりに機能します。
私が試してみると:
…次のエラーが表示されます。
newsequentialid()組み込み関数は、CREATETABLEまたはALTERTABLEステートメントの「uniqueidentifier」タイプの列のDEFAULT式でのみ使用できます。他の演算子と組み合わせて、複雑なスカラー式を形成することはできません。
- 一時テーブルメソッドを使用する唯一の解決策はありますか?
NEWSEQUENTIALID()
マイクロソフトがのように機能するために違いを実装した理由を誰かが知っていますNEWID()
か?NEWSEQUENTIALID()
Microsoftが次のように動作するように更新する可能性があるかどうか誰かが知っていNEWID()
ますか?
ジオ
更新-「NEWSEQUENTIALIDはWindowsUuidCreateSequential関数のラッパーである」と述べているため、Microsoftがこの方法でメソッドを実装することを選択した理由はわかりません...しかし、非一時変数はないようですテーブルメソッド。(少なくとも現時点では。)
皆さんのコメント/回答に感謝します。【モデレーター注:】答えが「不可能」の場合、質問をどうすればいいのかわかりません。そこで、回避策の詳細について@marc_sの功績を認めます。
c# - Entity Framework 5 コードの最初の newsequentialid() を PK として
newsequentialid()
PK 列のデフォルト値として使用するにはどうすればよいですか?
私はこの注釈を持っています:
しかし、これはランダムなGUIDを生成します。連続したGUIDが必要です。
データベースをnewsequentialid()
デフォルト値として手動で設定できますが、より良いオプションはありませんか? それとも、EF チームはこのオプションを忘れていましたか?