タグ付けされた質問 「sql-server」

Microsoft SQL Serverのすべてのバージョン(MySQL以外)。sql-server-2016のようなバージョン固有のタグも追加してください。これは、質問に関連することが多いためです。


5
SQL Serverリンクサーバーのパフォーマンス:リモートクエリがそれほど高価なのはなぜですか?
リンクサーバー経由で接続された2つのデータベースサーバーがあります。どちらもSQL Server 2008R2データベースであり、リンクサーバー接続は、現在のログインのセキュリティコンテキストを使用して、通常の「SQL Server」リンクを介して行われます。リンクされたサーバーは両方とも同じデータセンターにあるため、接続は問題になりません。 次のクエリを使用して、identifierローカルではなくリモートで使用可能な列の値を確認します。 SELECT identifier FROM LinkedServer.RemoteDb.schema.[TableName] EXCEPT SELECT DISTINCT identifier FROM LocalDb.schema.[TableName] 両方のテーブルには、列に非クラスター化インデックスがありますidentifier。ローカルは約260万行、リモートは54行のみです。しかし、クエリプランを見ると、実行時間の70%が「リモートクエリの実行」に費やされています。また、完全なクエリプランを調べる場合、推定ローカル行の数1は2695380(の後に来るクエリのみを選択した場合の推定行の数)の代わりになりますEXCEPT。 このクエリを実行すると、実際に時間がかかります。 不思議に思う:これはなぜですか?推定値は「ちょうど」外れていますか、それともリンクサーバーでのリモートクエリは本当にそれほど高価ですか?

5
複数のデータベースを使用する場合と単一のデータベースを使用する場合の長所/短所
私は、7つのデータベースを使用する必要がある新しいプロジェクトに取り組んでおり、パフォーマンス、安定性、最適化をより簡単に実装できると主張していました。 私は同意しませんが、単一のデータベースを使用する(テーブルを論理ドメインに分割する)ための適切な引数を収集するのに問題があります。 これまでの議論の1つは、データの整合性です(データベース間で外部キーを使用することはできません)。 単一または複数のデータベースを使用する場合の長所と短所は何ですか? [これまでの概要] 複数のデータベースに対する引数: データの整合性が失われます(データベースで外部キーを使用できません) 復元の整合性を失う 複雑化(dbユーザー/ロール) 小さなオッズのサーバー/データベースがダウンします ソリューション: スキーマを使用してドメインを分離します。 POC:ダミーデータを使用して7/1 dbの実行計画のポイントを証明する


2
インデックス付きテーブルに挿入するときに最小限のログが取得されないのはなぜですか
私はさまざまなシナリオで最小限のロギング挿入をテストしており、TABLOCKを使用して非クラスター化インデックスを持つヒープにINSERT INTO SELECTを読んだことから、SQL Server 2016+は最小限に記録する必要がありますが、これを行うときは完全なロギング。私のデータベースは単純な復旧モデルであり、インデックスとTABLOCKを使用せずに、ヒープ上に最小限のログが挿入されます。 Stack Overflowデータベースの古いバックアップを使用してテストし、次のスキーマでPostsテーブルの複製を作成しました... CREATE TABLE [dbo].[PostsDestination]( [Id] [int] NOT NULL, [AcceptedAnswerId] [int] NULL, [AnswerCount] [int] NULL, [Body] [nvarchar](max) NOT NULL, [ClosedDate] [datetime] NULL, [CommentCount] [int] NULL, [CommunityOwnedDate] [datetime] NULL, [CreationDate] [datetime] NOT NULL, [FavoriteCount] [int] NULL, [LastActivityDate] [datetime] NOT NULL, [LastEditDate] [datetime] NULL, [LastEditorDisplayName] [nvarchar](40) NULL, …

3
同じテーブルの異なる列のカウントを取得する方法
表#01 Status: StatusID Status ----------------------- 1 Opened 2 Closed 3 ReOpened 4 Pending 表#02 Claims: ClaimID CompanyName StatusID -------------------------------------- 1 ABC 1 2 ABC 1 3 ABC 2 4 ABC 4 5 XYZ 1 6 XYZ 1 期待される結果: CompanyName TotalOpenClaims TotalClosedClaims TotalReOpenedClaims TotalPendingClaims -------------------------------------------------------------------------------- ABC 2 1 0 1 XYZ …
14 sql-server  pivot 

2
主キーを追加する前に、または後にページレベルの圧縮を追加する必要がありますか?
状況 SQL Server 2008 Enterpriseのデータウェアハウス 3,600万行以上のヒープ(問いません)、60列以上 毎月75万件追加 主キーが定義されていません(現在識別されています) 圧縮なし 私が考えていること(この順序で) ページレベルの圧縮を追加する PKを追加します 多数の非クラスター化インデックスを追加する できるだけ早くこれを行う 質問 最終的には、最初にPKまたはページ圧縮を追加しますか?(重要ですか?) 最初に圧縮をテーブルに追加すると、インデックスはテーブルレベルの圧縮設定を継承しますか?この特定の質問に対する答えは、「いいえ、圧縮は継承されません」です。dba.stackexchangeにあります。 私が今傾いていること -- Add page level compression alter table dbo.TableName rebuild with (data_compression = page) ; go -- Add primary key alter table dbo.TableName add constraint PK_TableName primary key clustered (<Columns>) ; go -- …

3
IDENTITY列のみを持つテーブルに挿入する方法は?
IDENTITY列のみを持つテーブルがある場合、新しい行をどのように挿入しますか?私は次を試しました: INSERT INTO TABLE (Syntax error) INSERT INTO TABLE VALUES() (Syntax error) INSERT INTO TABLE (Id) VALUES() (Syntax error) 私は何かをテストしていますが、IDENTITY列のみが必要です。本番用ではありません。それ以外の場合、このようなテーブルは、他の列が不要なシーケンスジェネレーターとして使用できます。

4
主キーで複数の行を返す結合から最初の行を選択する方法
これはこの質問に関連しています: 複数のテーブルを結合すると重複した行が発生します 参加しているテーブルが2つあります。彼らは鍵を共有します。personテーブルには主キーごとに1つの名前がありますが、emailテーブルにはpersonIdごとに複数のメールがあります。1人あたりの最初のメールのみを表示します。現在、メールが複数あるため、1人に複数の行が表示されます。SQL-Server 2005を実行しています。 編集:これはT-SQLです。最初のメールは文字通り、1人あたりの最初のメール行です。 編集2:最初の電子メールは、SQLがクエリを処理するときに結合に表示される最初の電子メール行になります。どのメールが表示されるかは関係ありません。表示されるメールは1つだけです。それがより明確になることを願っています。 Table1: Person Table2: Email Select Person.PersonName, Email.Email From person left join on Person.ID=Email.PersonId;

2
複数の条件があるケース
いくつかの条件に基づいて、selectステートメントからの戻り値を変更する必要があります。私はそのようなことを試しました: ,CASE i.DocValue WHEN 'F2' AND c.CondCode IN ('ZPR0','ZT10','Z305') THEN c.CondVal ELSE 0 END as Value なぜそれが機能していないのですか、これを行うための推奨方法は何ですか?次のWHEN条件がいくつかあります。 ありがとうございました
14 sql-server 

2
末尾にスペースがあるVarcharの動作
スペースを含むVarcharを使用すると、末尾のスペースが無視されます。 例: declare @X varchar(50) この... set @X= 'John' ...と同じです... set @X= 'John ' これらは等しいと見なします。システムにこれらを異なるものとして認識させるにはどうすればよいですか?

2
どのセッションがどの一時テーブルを保持しているかを見つける
一時データベースがいっぱいになったSQL Server 2005データベースがあります。SQL Server Management Studioにアクセスすると、tempdbのすべての一時テーブルを確認できます。どのセッションがどの一時テーブルを保持しているかを知ることはできますか?理想的には、各セッションで使用される一時テーブルをリストするクエリです。 おかげで、

5
テーブルを切り捨てるにはどのような権限が必要ですか?
データベースに対する次の権限を持つSQLアカウントを持っています。 db_executorこのアカウントは、このスクリプトによって作成されたの一員として見役割: CREATE ROLE [db_executor] AUTHORIZATION [dbo] GO GRANT EXECUTE TO [db_executor] GO テーブルで、、またはを実行するselectとupdate、正常に動作します。テーブルにアクセスしようとすると、次のエラーメッセージが表示されます。insertdeletetruncate オブジェクト "TableName"が存在しないか、権限がないため、見つかりません。 このアカウントにはどのような権限がありませんか?

3
SQLログファイルのサイズを最適に維持する方法
私はやや新しいDBAであり、かなりの量のアクティビティがあるSQL Server 2012インスタンスを管理しています。ポイントインタイムリカバリが必要なため、フルリカバリモードで実行しています。 現在、私は毎日午前5時にデータベースとログの完全バックアップを取っています。一部のログファイルは最大300 GBに膨らみ、バックアップを取ってもサイズは小さくなりません。次のようなものを実行することで、サイズを小さくすることができます。 BACKUP LOG db1 TO DISK = '\\server\share\db1_log1.trn'; DBCC ShrinkFile([db1_log], 0); BACKUP LOG db1 TO DISK = '\\server\share\db1_log2.trn'; DBCC ShrinkFile([db1_log], 0); BACKUP LOG db1 TO DISK = '\\server\share\db1_log3.trn'; DBCC ShrinkFile([db1_log], 0); バックアップファイルのLSNを確認すると、次のようなものが表示されます。 RESTORE headeronly FROM DISK = N'\\server\share\db1_log1.trn' FirstLSN: 15781000014686200001 SecondLSN: 15802000000665000001 RESTORE headeronly FROM DISK …

1
部分的にカバーする範囲の述語の優先度推定
現時点では、ヒストグラムステップを部分的にカバーする範囲述部のカーディナリティをSQL Serverがどのように評価するかを理解しようとしています。 インターネット上で、ステップ内統計値の基数推定で、私は同様の質問に出くわし、Paul Whiteはそれに対してかなり興味深い答えを出しました。 Paulの答えによれば、述語> =および>のカーディナリティーを推定するための式(この場合、少なくとも120のカーディナリティー推定モデルにのみ興味があります)は次のとおりです。 >の場合: Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * (F * (DISTINCT_RANGE_ROWS - 1))) > =の場合: Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * ((F * (DISTINCT_RANGE_ROWS - 1)) + 1)) TransactionDate列と '20140614'から '20140618'までの日時の範囲を使用して、範囲の述語に基づいてAdventureWorks2014データベースの[Production]。[TransactionHistory]テーブルでこれらの式の適用をテストしました。 この範囲のヒストグラムステップの統計は次のとおりです。 式に従って、次のクエリの基数を計算しました。 SELECT COUNT(1) FROM [AdventureWorks2014].[Production].[TransactionHistory] WHERE [TransactionDate] BETWEEN '20140615 00:00:00.000' AND '20140616 00:00:00.000' …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.