タグ付けされた質問 「query-performance」

データベースクエリのパフォーマンスや効率の向上に関する質問。

4
クエリの複数の列で同じテーブル値関数を呼び出す最も効率的な方法
同じテーブル値関数(TVF)が20列で呼び出されるクエリを調整しようとしています。 最初に行ったのは、スカラー関数をインラインテーブル値関数に変換することでした。 CROSS APPLYクエリの複数の列で同じ関数を実行するために最高のパフォーマンスを発揮する方法を使用していますか? 単純な例: SELECT Col1 = A.val ,Col2 = B.val ,Col3 = C.val --do the same for other 17 columns ,Col21 ,Col22 ,Col23 FROM t CROSS APPLY dbo.function1(Col1) A CROSS APPLY dbo.function1(Col2) B CROSS APPLY dbo.function1(Col3) C --do the same for other 17 columns より良い代替案はありますか? X個の列に対して複数のクエリで同じ関数を呼び出すことができます。 これが関数です: CREATE …

1
CPUが100%、実行プランが不良
特定のクエリで使用されている実行プランに問題があるため、CPUスパイクが100%になるという大きな問題があります。私は今、自分で解決するのに数週間を費やしています。 私のデータベース 私のサンプルDBには、3つの簡略化されたテーブルが含まれています。 [データ・ロガー] CREATE TABLE [model].[DataLogger]( [ID] [bigint] IDENTITY(1,1) NOT NULL, [ProjectID] [bigint] NULL, CONSTRAINT [PK_DataLogger] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] 【インバーター】 CREATE TABLE [model].[Inverter]( [ID] [bigint] IDENTITY(1,1) NOT NULL, [SerialNumber] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Inverter] …

5
ウィンドウ関数を使用したサブクエリの最適化
私のパフォーマンスチューニングのスキルを十分に感じるように見えることはありませんようがあれば、私はいつも疑問に思うより多くの私はいくつかのクエリに対して実行することができ、最適化が。この質問が関係する状況は、サブクエリ内にネストされたウィンドウ化MAX関数です。 私が調べているデータは、より大きなセットのさまざまなグループでの一連のトランザクションです。重要なフィールドは4つあります。トランザクションの一意のID、トランザクションのバッチのグループID、およびそれぞれの一意のトランザクションまたはトランザクションのグループに関連付けられた日付です。ほとんどの場合、グループの日付はバッチの最大一意のトランザクションの日付と一致しますが、システムで手動調整が行われ、グループのトランザクションの日付がキャプチャされた後に一意の日付の操作が発生する場合があります。この手動編集では、グループの日付は意図的に調整されません。 このクエリで特定するのは、一意の日付がグループの日付の後にあるレコードです。次のサンプルクエリは、私のシナリオにほぼ相当するものを構築し、SELECTステートメントは探しているレコードを返しますが、このソリューションに最も効率的な方法でアプローチしていますか?これは、ファクトテーブルの読み込み中にレコードが上位9桁の数を数えるため、実行に時間がかかりますが、ほとんどの場合、サブクエリを無視することで、ここにもっと良いアプローチがあるかどうか疑問に思います。インデックスは既に用意されていると確信しているので、インデックスについては心配していません。私が探しているのは、同じことを実現するが、さらに効率的な代替のクエリアプローチです。どんなフィードバックでも大歓迎です。 CREATE TABLE #Example ( UniqueID INT IDENTITY(1,1) , GroupID INT , GroupDate DATETIME , UniqueDate DATETIME ) CREATE CLUSTERED INDEX [CX_1] ON [#Example] ( [UniqueID] ASC ) SET NOCOUNT ON --Populate some test data DECLARE @i INT = 0, @j INT = 5, @UniqueDate DATETIME, @GroupDate DATETIME …

4
500M +アイテムのクエリを処理する方法
私のデータの構造は次のとおりです: date: <timestamp> filter_a: <integer> -> range [0, 1000] filter_b: <integer> -> range [0, 1000] filter_c: <integer> -> range [0, 86400] filter_d: <integer> -> range [0, 6] group: <string> second_group: <integer> variable_a: <float> variable_b: <float> variable_c: <float> a couple more no very important 次のクエリを実行する必要があります。 最初: フィルターデータによってdate、filter_a、filter_b、filter_c、その他 次に、フィルタリングされたデータを使用します。 すべてのレコードを数える 取得平均のvariable_a、variable_bおよびvariable_c 取得標準偏差のをvariable_a、variable_bそしてvariable_c …

3
sys.schemasおよびsys.synonymsに対するクエリの実行が1人のユーザーに対して非常に遅い
シナリオ:SQL Server 2014(v12.0.4100.1) .NETサービスはこのクエリを実行します。 SELECT name, base_object_name FROM sys.synonyms WHERE schema_id IN (SELECT schema_id FROM sys.schemas WHERE name = N'XXXX') ORDER BY name ...約6500行を返しますが、3分以上経過するとタイムアウトすることがよくあります。XXXX上記はありません「DBO」。 SSMSでこのクエリをUserAとして実行すると、クエリは1秒未満で返されます。 UserB(.NETサービスの接続方法)として実行すると、クエリは3〜6 分かかり、CPU使用率は(4コアの)25%になります。 UserAは、sysadminロールのドメインログインです。 UserBはSQLログインです。 EXEC sp_addrolemember N'db_datareader', N'UserB' EXEC sp_addrolemember N'db_datawriter', N'UserB' EXEC sp_addrolemember N'db_ddladmin', N'UserB' GRANT EXECUTE TO [UserB] GRANT CREATE SCHEMA TO [UserB] …

1
この状況で、テーブル変数がクエリのパフォーマンスをどのように向上させているのですか?
この特定のケースでは、以下で説明しようとしますが、テーブル変数を使用すると、テーブル変数を使用しない場合よりもパフォーマンスが向上します。 理由を知りたいのですが、可能であれば、テーブル変数を削除します。 これは、テーブル変数を使用したクエリです。 USE [BISource_UAT] GO set statistics io on SET STATISTICS TIME ON SET NOCOUNT ON; DECLARE @OrderStartDate DATETIME = '15-feb-2015' DECLARE @OrderEndDate DATETIME = '28-feb-2016' DECLARE @tmp TABLE ( strBxOrderNo VARCHAR(20) ,sintReturnId INT ) INSERT INTO @tmp SELECT strBxOrderNo ,sintReturnId FROM TABLEBACKUPS.dbo.tblBReturnHistory rh WHERE rh.sintReturnStatusId in ( 3 …

1
SQL Server、TOP対ROW_NUMBER
私は実行計画について学び、さまざまなクエリを試し、それらのパフォーマンスを比較して、これに遭遇しました: SELECT StatisticID FROM ( SELECT StatisticID, ROW_NUMBER() OVER (ORDER BY StatisticID) AS rn FROM FTCatalog.Statistic ) AS T WHERE T.rn <= 1000 ORDER BY rn SELECT TOP 1000 StatisticID FROM FTCatalog.Statistic ORDER BY StatisticID どちらも同じ結果セットを返しますが、最初の方が実行速度が速く、リソースの消費量も少なくなります(少なくともSSMSはそれを教えてくれます)。ここでは実行計画を示します。 SQLクエリプランエクスプローラーとの比較: 実際に舞台裏で何が起こっているのか、なぜ結果が異なるのかについて誰かに洞察を与えることはできますか?他に必要なものがあれば、お知らせください。 ありがとう、エヴァルダス。

1
インデックスは、個別のSELECTと比較してOR条件を使用するとはるかに遅くなります
これらの質問と与えられた回答に基づいて: SQL 2008 Server-非常に大きなテーブルに接続されている可能性があるパフォーマンスの損失 履歴データを含む大きなテーブルは、SQL Server 2008 Stdを過剰に割り当てます。メモリ-他のデータベースのパフォーマンス低下 データベースSupervisionPに次のように定義されたテーブルがあります。 CREATE TABLE [dbo].[PenData]( [IDUkazatel] [smallint] NOT NULL, [Cas] [datetime2](0) NOT NULL, [Hodnota] [real] NULL, [HodnotaMax] [real] NULL, [HodnotaMin] [real] NULL, CONSTRAINT [PK_Data] PRIMARY KEY CLUSTERED ( [IDUkazatel] ASC, [Cas] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS …

2
SQL Serverで派生テーブルよりも一時テーブルを使用する利点はありますか?
派生テーブルは一時テーブルよりもパフォーマンスが優れていますが、とにかく多くのSQL Server開発者は2番目のテーブルを好みます。どうして?大量のデータ(数百万のレコード)でクエリを実行する必要があり、最良の選択を使用していることを確認したい。 CREATE TABLE A( id BIGINT IDENTITY(1,1) NOT NULL, field1 INT NOT NULL, field2 VARCHAR(50) NULL, ); CREATE TABLE B( id INT IDENTITY(1,1) NOT NULL, field1 VARCHAR(10) NULL, field2 INT NULL ); INSERT INTO A (field1,field2) VALUES (1,'a'),(2,'b'),(3,'c'),(2,'d'),(5,'e'), (6,'f'),(7,'g'),(8,'h'),(9,'i'),(2,'j'); INSERT INTO B (field1,field2) VALUES ('a',1),('b',2),('c',3),('d',4),('e',5), ('f',6),('g',7),('h',8),('i',9),('j',2),('k',3); DECLARE @begin INT=0,@end …

2
MAXを使用したGROUP BY対MAXのみ
私はプログラマーで、次のような大きなテーブルを扱っています。 UpdateTime, PK, datetime, notnull Name, PK, char(14), notnull TheData, float にクラスター化インデックスがあります Name, UpdateTime 私は何が速くなるべきか疑問に思っていました: SELECT MAX(UpdateTime) FROM [MyTable] または SELECT MAX([UpdateTime]) AS value from ( SELECT [UpdateTime] FROM [MyTable] group by [UpdateTime] ) as t このテーブルへの挿入は、同じ日付の 50,000行のチャンクです。したがって、グループ化することでMAX計算が容易になると考えました。 最大150,000行を見つけようとする代わりに、3行にグループ化すると、計算MAXが速くなりますか?私の仮定は正しいですか、グループ化もコストがかかりますか?

1
推定された行と実際の行の違い(実際は推定よりもはるかに小さい)-ソート
XMLドキュメントからいくつかのノードを処理するクエリを実行しています。私の推定サブツリーのコストは数百万単位であり、それはすべて、XPathを介してxml列から抽出したいくつかのデータに対してSQLサーバーが実行しているソート操作に由来するようです。Sortオペレーションの推定行数は約1900万ですが、実際の行数は約800です。クエリ自体は適切に実行されますが(1〜2秒)、クエリのパフォーマンスとその理由について疑問に思っています。違いはとても大きいですか?

3
SSMSを取得して、実行プランペインに実際のクエリコストを表示できますか?
SQL Serverのマルチステートメントストアドプロシージャのパフォーマンスの問題を修正しています。時間をかけるべき部分を知りたい。 クエリコストの読み取り方法から理解しましたが、それは常にパーセントですか?SSMSに実際の実行計画を含めるように指示された場合でも、「クエリコスト(バッチに対する)」の数値はコスト見積もりに基づいており、実際とはかけ離れている場合があります。 クエリパフォーマンスの測定:「実行プランのクエリコスト」と「実行時間」から、ストアドプロシージャの呼び出しをSET STATISTICS TIMEステートメントで囲むことができることがわかり、Messagesペインに次のようなリストが表示されます。 SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 1 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. [etc] SQL Server Execution Times: CPU time = 187 ms, elapsed time = 206 …

1
SQL Serverの継続時間測定は実際に何を測定しますか?
プロファイラートレースを実行するとき、クエリ期間は正確に何を測定しますか? データアクセス(SELECT)を実行するストアドプロシージャがあり、アプリケーションに結果を返すまでに平均で約30秒かかります。しかし、トレースを実行すると、平均所要時間は約8秒、最大所要時間は12秒、平均CPUは5.5秒です。 結果セットを返すのに、これほど長い時間がかかる原因は何ですか?大量のNETWORKIO待機を蓄積していません。結果セットは単純なテキストデータの約270行、合計約50列です。

2
SQLクエリの最適化と実行プランの理解-リソース?
仕事でますます多くのSQLクエリ(主にOracle 11g、一部のSQL Server 2005-2008)を書いていることに気付き、残りのアナリストチームのためにかなり複雑なビューの作成を開始しました。 それらはほとんどすべて非常にうまく動作しますが、いくつかはそれほどうまくいきません。そう... クエリを調整する方法を教えてください。 実行計画を読んで行動することを学ぶ必要がありますか? そして... SQLクエリのチューニングについて1)一般に2)特にOracle 11gについて学習するためにどの本/ウェブサイトをお勧めできますか? ここには優れたDBAが何人かいますが、彼らは多すぎて、作成するすべてのクエリを調整するのに役立ちません。 私がAmazonでOracleで見つけたほとんどの本は、全体的なデータベースの最適化を対象としたものであるか、8〜10年前に書かれたものです。 アドバイスありがとうございます:)


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