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

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

4
データベースを縮小する必要があります-多くのスペースを解放しました
この質問はさまざまな形式でここに尋ねられますが、質問は次のように要約されます。 データベースの縮小は危険を伴うことを知っています。この場合、大量のデータを削除したため、二度と使用しません。 データベースを縮小するにはどうすればよいですか?どのファイルを縮小しますか? これを行う際の考慮事項は何ですか? 後は何をすべきですか? 大規模なデータベースの場合はどうなりますか?少しずつ縮小できますか?

2
SQLバッチ、ステートメント、RPCの違いは?
SQLバッチ、T-SQLステートメント、およびリモートプロシージャコールの違いは何ですか? T-SQLコードの一部がバッチまたはステートメントであるかどうかを確認するにはどうすればよいですか?
35 sql-server 

1
削除と切り捨て
コマンドDELETEとTRUNCATEコマンドの違いをより深く理解しようとしています。内部についての私の理解は、次のようなものに沿っています。 DELETE->データベースエンジンは、関連するデータページおよび行が入力されているすべてのインデックスページから行を見つけて削除します。したがって、インデックスが多いほど、削除に時間がかかります。 TRUNCATE ->すべてのテーブルのデータページをまとめて削除するだけで、テーブルの内容を削除するためのより効率的なオプションになります。 上記が正しいと仮定します(正しくない場合は修正してください): さまざまな回復モードが各ステートメントにどのように影響しますか?なんらかの効果がある場合 削除するとき、すべてのインデックスがスキャンされますか、それとも行があるインデックスのみがスキャンされますか?私はすべてのインデックスがスキャンされていると仮定します(シークされませんか?) コマンドはどのように複製されますか?SQLコマンドは各サブスクライバで送信および処理されますか?それとも、MSSQLはそれよりも少しインテリジェントですか?

2
TOPは実行計画にどのように(そしてなぜ)影響しますか?
最適化しようとしている中程度に複雑なクエリのTOP n場合、句を削除すると実行プランが変更されることに気付きました。クエリにTOP nデータベースエンジンが含まれている場合、TOP句を無視してクエリを実行し、最後にその結果セットを要求されたn行まで縮小するだけだと思いました。グラフィカルな実行計画は、これが事実であることを示しているようです- TOP「最後の」ステップです。しかし、さらに進んでいるようです。 私の質問は、TOP n句がクエリの実行計画にどのように(そしてなぜ)影響するかです。 これは私の場合に起こっていることの単純化されたバージョンです: クエリは、AとBの2つのテーブルの行を照合しています。 TOP句がない場合、オプティマイザは、テーブルAから19k行、テーブルBから46k行があると推定します。返される実際の行数は、Aで16k、Bで13kです。合計69行(ソートが適用されます)。このクエリは非常に高速に発生します。 TOP 1001オプティマイザーを追加するとき、ハッシュ一致を使用しません。代わりに、最初にテーブルAからの結果をソートし(同じ推定値/実際の19k / 16k)、テーブルBに対してネストされたループを実行します。テーブルBの推定行数は1になり、奇妙なことはTOP n、 Bに対する推定実行数(インデックスシーク)-常に2n + 1、または私の場合は2003であるように見えますTOP n。もちろん、これはネストされた結合であるため、実際の実行回数は16k(テーブルAの行数)であり、これによりクエリの速度が低下します。 実際のシナリオはもう少し複雑ですが、これは基本的なアイデア/動作をキャプチャします。両方のテーブルは、インデックスシークを使用して検索されます。これはSQL Server 2008 R2 Enterpriseエディションです。

2
EXISTSで存在を確認してください。…違いますか?
行の存在を常に COUNTではなくEXISTSで確認する必要がある場合によく読んでいます。 しかし、最近のいくつかのシナリオでは、カウントを使用したときのパフォーマンスの改善を測定しました。 パターンは次のようになります。 LEFT JOIN ( SELECT someID , COUNT(*) FROM someTable GROUP BY someID ) AS Alias ON ( Alias.someID = mainTable.ID ) 私はSQL Serverの「内部」で何が起こっているのかを知る方法に精通していないので、私が行った測定に完全に意味のあるEXISTSの前例のない欠陥があるのではないかと思っていました(RISTが存在する可能性があります!)。 その現象についての説明はありますか? 編集: 実行できる完全なスクリプトを次に示します。 SET NOCOUNT ON SET STATISTICS IO OFF DECLARE @tmp1 TABLE ( ID INT UNIQUE ) DECLARE @tmp2 TABLE ( ID …

4
テーブルの定義内の列の順序は重要ですか?
テーブルを定義するとき、論理グループ内の列とグループ自体を目的別に並べると便利です。テーブル内の列の論理的な順序は、開発者に意味を伝え、良いスタイルの要素です。 それは明らかです。 ただし、テーブル内の列の論理的な順序がストレージレイヤーでの物理的な順序に影響を与えるかどうか、または気になるその他の影響があるかどうかは明らかではありません。 スタイルへの影響とは別に、列の順序は重要ですか? これについてStack Overflowに質問がありますが、信頼できる答えがありません。

1
特定の複数列インデックスの代わりに、多くの単一フィールドインデックスを使用する必要がありますか?
この質問は、SQL Serverのインデックス作成手法の有効性に関するものです。「インデックスの交差点」として知られていると思います。 多数のパフォーマンスと安定性の問題がある既存のSQL Server(2008)アプリケーションを使用しています。開発者は、インデックス作成に関して奇妙なことをしました。私はこれらの問題に関する決定的なベンチマークを得ることができませんでしたし、インターネット上で本当に良いドキュメントを見つけることもできませんでした。 テーブルには多くの検索可能な列があります。開発者は、検索可能な各列に単一の列インデックスを作成しました。理論は、SQL Serverはこれらの各インデックスを結合(交差)して、ほとんどの状況でテーブルに効率的にアクセスできるというものでした。簡単な例を次に示します(実際のテーブルにはさらにフィールドがあります)。 CREATE TABLE [dbo].[FatTable]( [id] [bigint] IDENTITY(1,1) NOT NULL, [col1] [nchar](12) NOT NULL, [col2] [int] NOT NULL, [col3] [varchar](2000) NOT NULL, ... CREATE NONCLUSTERED INDEX [IndexCol1] ON [dbo].[FatTable] ( [col1] ASC ) CREATE NONCLUSTERED INDEX [IndexCol2] ON [dbo].[FatTable] ( [col2] ASC ) select * from …

2
回復中のSQL Serverデータベースを停止、オフライン、および削除するにはどうすればよいですか?
再起動時に復旧モードに入り、最近1時間ほど復旧している開発データベースがあります。 回復を停止するか、何らかの方法で強制終了する必要があります。 データベースやデータについては少しも気にしません。展開スクリプトがあります。 何か案は?

4
NOLOCKは常に悪いですか?
私は、可能な限り効率的にクエリを作成したいレポート開発者です。以前は、運用サーバーでレポートを処理していたためNOLOCK、すべてのクエリで使用できると言っていたDBAと仕事をしていました。 今、私はNOLOCKどんな状況下でも禁止しているDBAと仕事をしています-私のレポート(いくつかのテーブルのインデックスがかなり不足しているため)がレプリケーションとシステムの更新を停止している場合でも。私の意見では、この場合、a NOLOCKは良いことです。 私のSQLトレーニングのほとんどは、非常に異なる意見を持つさまざまなDBAに来ているので、これを多種多様なDBAに依頼したいと思いました。

1
クエリコストを読み取るにはどうすればよいですか?それは常にパーセンテージですか?
現在、SQL 70-433(Microsoft認定試験)を勉強していますが、「クエリコスト」パフォーマンスメトリックについて非常に混乱しています。 Googleで見つけたドキュメントによると、クエリコストは割合の数字であり、その一部が占めるバッチ全体の割合を表します。私は特定のクエリの絶対的なメリットに興味があるので、これはすでに少し奇妙に思えました。それは、それと一緒に表示される他のクエリに対するメリットよりもむしろメリットです。 しかし、2つの代替クエリを並べて「バッチ」として実行し、コストが50%未満の方が勝者になることを期待しているのかもしれません。 しかし、MicrosoftのSQL 70-433トレーニングキットのレッスン6の第6章でのクエリコストの議論は、これとは何の関係もないようです。 次に例を示します。2つの相関サブクエリを含むクエリを示し、サブクエリをOUTER APPLYに置き換えることでクエリを改善します。結果:「このクエリのコストは約76ですが、最初のクエリのコストはその2倍、約151です。」その後、クエリをさらに改善し、コストを76から3.6に削減します。これらの数値がパーセンテージであることを意味するのではなく、他のクエリを参照せずに、スタンドアロンオブジェクトとしてのクエリに関連する絶対的な数値であることを意味します。とにかく、最初のクエリのコストを151%にするにはどうすればよいでしょうか? この章の後半では、3つの部分からなる実行計画のスクリーンショットを示しています。最初の部分は「コスト:0%」、2番目の部分は「コスト:1%」、最後の部分は「コスト:99%」ですが、スクリーンショットの下のテキスト(本自体)は「このクエリのコストは0.56」です。私はそれらが他の種類のコストを意味すると推測していますが、他の場所でそれを参照することはできません。 誰か助けてもらえますか?私は完全に混乱しています。
34 sql-server  ssms 

1
すべてのT-SQLステートメントの後
各SQLステートメントの後にGOステートメントを使用する理由は何ですか?GOはバッチの終了を通知し、ステートメントの評判を許可しますが、ステートメントごとにそれを使用する利点は何ですか。 声明のたびに多くのマイクロソフトのドキュメントなどが使用を開始したか、気づき始めたばかりかもしれません。 また、ベストプラクティスと見なされるものは何ですか?

2
インデックスが実行を高速化せず、場合によってはクエリが遅くなります。なぜそうですか?
速度を上げるためにインデックスを試していましたが、結合の場合、インデックスはクエリの実行時間を改善せず、場合によっては速度が低下します。 テストテーブルを作成してデータを入力するクエリは次のとおりです。 CREATE TABLE [dbo].[IndexTestTable]( [id] [int] IDENTITY(1,1) PRIMARY KEY, [Name] [nvarchar](20) NULL, [val1] [bigint] NULL, [val2] [bigint] NULL) DECLARE @counter INT; SET @counter = 1; WHILE @counter < 500000 BEGIN INSERT INTO IndexTestTable ( -- id -- this column value is auto-generated NAME, val1, val2 ) VALUES ( 'Name' …
34 sql-server  index 

3
カウントで実行中の合計?
タイトルが示唆しているように、T-SQLで積算合計を取得するためにいくつかの助けが必要です。問題は、私がする必要がある合計がカウントの合計であることです: sum(count (distinct (customers))) カウントを単独で実行した場合、結果は次のようになります。 Day | CountCustomers ---------------------- 5/1 | 1 5/2 | 0 5/3 | 5 私は合計で出力する必要があります: Day | RunningTotalCustomers ---------------------- 5/1 | 1 5/2 | 1 5/3 | 6 coalesceメソッドを使用する前に合計を実行しましたが、カウントは実行しませんでした。私はカウントを持っているので、今それを行う方法がわかりません。
34 sql-server  t-sql 

1
SQL ServerのSLEEP_TASK待機タイプ-それは何を示していますか?
私はSLEEP_TASK前に待機タイプを見たことがありません、そして今日、私はそれらのトンを得ているようです。 私は公式のDBAではなく、DBAの知識があるSQL Server開発者です。先週末、サーバーを10.52.2500.0-R2SP1にアップグレードしました。 オンラインで見つけた情報はすべて、SLEEP_TASKサーバーが何らかの内部プロセスの完了を待っていることを示しています。チェックポイントやゴーストクリーンアップなどのブロッキングプロセスやバックグラウンドプロセスが実行されていないため、少し困惑しています。 この待機タイプを以前に見たことがありますか?

5
SQL ServerでTimeZoneを適切に処理する方法は?
私のローカル開発サーバーは中東にありますが、本番サーバーは英国にあります。 ユーザーにタイムゾーンで日付を表示する必要があります。たとえば、ユーザーがサウジアラビアにいる場合、サウジアラビアの形式に従って時間を表示する必要があります。 TimeZoneという新しいデータベーステーブルを作成し、UTCで時間を保存する必要がありますか?

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