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

SQL Server 2005(メジャービルドバージョン9.00.xxxx)。sql-serverにもタグを付けてください。


6
SQL Serverは現在使用中のため、データベース<dbname>を削除できませんが、セッションは表示されません
データベースを削除しようとすると、「データベース "dbname"は現在使用中のため削除できません」というエラーが表示されます。ただし、実行するとsp_who2、このデータベースに接続されているセッションは絶対にありません。また、データベースをに設定しましたsingle_user mode with rollback immediate。 なぜこうなった?

6
sql-serverでコミットスナップショットの読み取りを有効にした場合、どのようなリスクがありますか?
ここでは、行ごとにいくつかの追加データが保存されるため、パフォーマンスの低下が見られる可能性があることを読みましたが、他にどのようなリスクがありますか? 例えば。これはデータベースの回復に影響しますか?これを利用するために私たちがしなければならないことは他にありますか? これらのコマンドを実行する予定です。 ALTER DATABASE DatabaseName SET READ_COMMITTED_SNAPSHOT ON ALTER DATABASE DatabaseName SET ALLOW_SNAPSHOT_ISOLATION ON これにより、1つのトランザクションが他のトランザクションを更新している場合でも古いデータを読み取ることができるオラクルに近いものが得られると思います。これは正しいです? SQL Server 2005のロックの問題にうんざりしているので、これを検討しています。これにより、ユーザーが時折発生するデッドロックを減らし、アプリケーションの全体的なパフォーマンスを向上させ、恐れ。


4
インデックスシークとインデックススキャン
実行速度の遅いクエリの実行プランを見ると、ノードの一部がインデックスシークであり、一部がインデックススキャンであることがわかりました。 インデックスシークとインデックススキャンの違いは何ですか? どちらがパフォーマンスが良いですか? SQLはどのように一方を選択しますか? これは3つの質問ですが、最初の質問に答えると他の質問も説明できると思います。

3
ワイルドカード(またはトップ)の追加に関するSQL Serverクエリの大幅な減速
SQL Server 2005データベースで追跡する2,000万匹の動物園があります。それらの約1%は黒で、約1%は白鳥です。私はすべての黒い白鳥の詳細を取得したかったので、私がやった結果ページを埋めたくありませんでした。 select top 10 * from animal where colour like 'black' and species like 'swan' (はい、これらのフィールドはフリーテキストですが、両方ともインデックス付けされています)。クエリが約300ミリ秒で空のセットを返すため、このような動物はいません。「いいね」ではなく「=」を使用した場合、約2倍の速さでしたが、入力の手間を省くという予感があります。 頭の飼育係は彼が白鳥のいくつかを「黒っぽい」と入力したかもしれないと思うので、それに応じてクエリを修正します: select top 10 * from animal where colour like 'black%' and species like 'swan' どちらもありません(実際、「黒」以外の「黒%」動物はありません)が、クエリが空になるまでに約30秒かかります。 それは、「top」と「like%」の組み合わせだけが問題を引き起こしているようです select count(*) from animal where colour like 'black%' and species like 'swan' すぐに0を返し、さらに select * …

5
SQL Serverメンテナンスプラン-タスクとスケジューリングのベストプラクティス
私は、SQL Server 2005データベースのメンテナンスプランを考案する必要があります。バックアップについては、毎日15分ごとにデータベースの完全バックアップとトランザクションログバックアップを行いたいと考えています。私が抱えている問題は、他にどのようなタスクをやりたいのか、どのくらいの頻度でそれらを行うべきなのかを把握することです。 それで、これまでのところ私はこれを念頭に置いています。私の考えに欠陥がある場合、またはこれを行うためのより良い方法がある場合は、私を修正してください。 バックアップ-すべてのテーブル、フルバックアップ(毎日) バックアップ-選択したテーブル、フルバックアップ(1時間ごと) バックアップ-トランザクションログ(15分ごと) データベースの整合性を確認する(毎日) インデックスの再編成(毎日) 統計の更新(毎日) データベースの縮小(毎週) インデックスの再構築(毎週) メンテナンスクリーンアップ(毎日) これらのタスクの一部は毎日実行する必要がないか、毎日実行するべきではないことを少し前に(別のジョブで同様の計画を設定したとき)読んだことを思い出しました。どのものに関しては、それは私を免れます。災害時のデータ損失を削減するより良いメンテナンスプランを作成するための少しのガイダンスを使用できますが、ピーク時の実行時にシステムに負担をかけません(そしてパフォーマンスも向上します)。

5
ストアドプロシージャを起動し、完了するのを待たずにすぐに戻ることはできますか?
ユーザーが手動で実行して、1日を通して常に使用されるレポートの更新された数値を取得できるストアドプロシージャがあります。 この最初のストアドプロシージャから取得した数値に基づいているため、最初のストアドプロシージャの実行後に実行する必要がある2番目のストアドプロシージャがありますが、実行に時間がかかり、別のプロセスのためです。この2番目のストアドプロシージャが実行されるまで、ユーザーを待機させます。 1つのストアドプロシージャで2番目のストアドプロシージャを開始し、結果を待たずにすぐに戻る方法はありますか? SQL Server 2005を使用しています。

10
SELECT INTOを使用してテーブルをコピーし、IDENTITYプロパティを無視するにはどうすればよいですか?
私は次のようなID列を持つテーブルを持っています: create table with_id ( id int identity(1,1), val varchar(30) ); これはよく知られています select * into copy_from_with_id_1 from with_id; idにIDを持つcopy_from_with_id_1になります。 次のスタックオーバーフローの質問では、すべての列を明示的にリストすることに言及しています。 やってみよう select id, val into copy_from_with_id_2 from with_id; この場合でもidはID列です。 私が欲しいのはテーブルのようなものです create table without_id ( id int, val varchar(30) );

4
インデックスに列を含めるための厳格なルール
非クラスター化インデックスに含める列とその順序を決定するための厳格なルールはありますか?私はちょうどこの投稿https://stackoverflow.com/questions/1307990/why-use-the-include-clause-when-creating-an-index を読んでいて、次のクエリでそれを見つけました: SELECT EmployeeID, DepartmentID, LastName FROM Employee WHERE DepartmentID = 5 ポスターは、次のようなインデックスを作成することを提案しました。 CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee(EmployeeID, DepartmentID) INCLUDE (Lastname) ここに、なぜこのようなインデックスを作成できないのかという質問があります CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, DepartmentID, LastName) または CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, LastName) INCLUDE (DepartmentID) そして、LastName列を含めることを決定するためにポスターを導くものは何ですか。他の列はなぜですか?そして、列をどの順序で保持するかをどのように決定するのですか?

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


2
どちらがより効率的ですか:リンクサーバーから選択するか、リンクサーバーに挿入しますか?
あるサーバーから別のサーバーに(リンクサーバー経由で)データをエクスポートする必要があるとします。どのステートメントがより効率的ですか? ソースサーバーでの実行: INSERT INTO [DestinationLinkedServer].[DestinationDB].[dbo].[Table] SELECT a, b, c, ... FROM [dbo].Udf_GetExportData() または、ターゲットサーバーで実行します。 INSERT INTO [dbo].[Table] SELECT a, b, c, ... FROM OPENQUERY([OriginLinkedServer], 'SELECT a, b, c, ... FROM [OriginDB].[dbo].Udf_GetExportData()') どちらがより速く、合計でより少ないリソースを消費しますか(ソースサーバーとターゲットサーバーの両方)。両方のサーバーはSQL Server 2005です。


7
SQL Server 2005で最小の複数列を取得する最も効率的な方法は何ですか?
6列の最小値を取得したい状況です。 これを達成するためにこれまでに3つの方法を見つけましたが、これらの方法のパフォーマンスに懸念があり、どちらがパフォーマンスに優れているかを知りたいと思います。 最初の方法は、大きなcaseステートメントを使用することです。上記のリンクの例に基づいて、3列の例を次に示します。6つの列を見るので、私のcaseステートメントはもっと長くなります。 Select Id, Case When Col1 &lt;= Col2 And Col1 &lt;= Col3 Then Col1 When Col2 &lt;= Col3 Then Col2 Else Col3 End As TheMin From MyTable 2番目のオプションはUNION、複数の選択ステートメントで演算子を使用することです。Idパラメーターを受け入れるUDFにこれを配置します。 select Id, dbo.GetMinimumFromMyTable(Id) from MyTable そして select min(col) from ( select col1 [col] from MyTable where Id = @id union …

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