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

データベースまたはその他の情報管理システムに保存されている情報を要求または変更するクエリを作成する。質問には、テーブルとインデックスの定義、サンプルデータ、予想される出力、および特定のシステム(MySQL、PostgreSQL、Oracle、SQL Server、MongoDBなど)のタグを含める必要があります。

3
WHERE INを使用した削除操作中の予期しないスキャン
次のようなクエリがあります。 DELETE FROM tblFEStatsBrowsers WHERE BrowserID NOT IN ( SELECT DISTINCT BrowserID FROM tblFEStatsPaperHits WITH (NOLOCK) WHERE BrowserID IS NOT NULL ) tblFEStatsBrowsersには553行あります。 tblFEStatsPaperHitsには47.974.301行があります。 tblFEStatsBrowsers: CREATE TABLE [dbo].[tblFEStatsBrowsers]( [BrowserID] [smallint] IDENTITY(1,1) NOT NULL, [Browser] [varchar](50) NOT NULL, [Name] [varchar](40) NOT NULL, [Version] [varchar](10) NOT NULL, CONSTRAINT [PK_tblFEStatsBrowsers] PRIMARY KEY CLUSTERED …

3
VARCHARカラムにインデックスを付けるのは良いアイデア/アプローチですか?
PostgreSQL v8.2.3を使用しています。 関係するテーブルがあります:EMPLOYEEとEMAILLIST。 Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6) Table 2: EMAILLIST (email) 2つのテーブルは、EMPLOYEE.EMAIL1またはEMPLOYEE.EMAIL2に一致するエントリがない場合、それらの行が返されるように結合されます。 SELECT employee.email1, employee.email2, e1.email IS NOT NULL AS email1_matched, e2.email IS NOT NULL AS email2_matched FROM employee LEFT JOIN emaillist e1 ON e1.email = employee.email1 LEFT JOIN emaillist e2 ON e2.email = employee.email2 …

3
1つの列と別の列のいずれかを個別に選択する方法は?
1つの列のすべての個別の値を見つけるためにSQLデータベースを照会する必要があり、別の列の任意の値が必要です。たとえば、キーと値の2つの列がある次の表を考えます。 key value === ===== one test one another one value two goes two here two also three example 個別のキーから任意に選択した1つのサンプル行を取得し、おそらく次の3行を取得したいです。 key value === ===== one test two goes three example SQLでこのようなクエリを作成するにはどうすればよいですか?
29 query 

5
クエリチューニングはプロアクティブかリアクティブか
ソフトウェア開発者および意欲的なDBAとして、SQL Serverデータベースを設計するときにベストプラクティスを取り入れようとしています(ソフトウェアがSQL Serverの上に置かれる時間の99%)。開発前および開発中に可能な限り最高の設計を行います。 ただし、他のソフトウェア開発者と同様に、機能、バグ、および変更/作成されたデータベースオブジェクトを必要とする要件の変更が追加されています。 私の質問は、クエリのチューニングはプロアクティブかリアクティブですか?言い換えれば、コード/データベースの大幅な変更の数週間後、クエリのパフォーマンスをチェックし、それに基づいてチューニングするために1日だけを確保する必要がありますか?それが実行されているように見える場合であっても大丈夫? または、平均以下のパフォーマンスはデータベースチェックであり、ことわざにある黒板に戻るべきであることに注意する必要がありますか? クエリのチューニングには多くの時間がかかる可能性があり、データベースの初期設計によっては、メリットが最小限になる場合があります。私は受け入れられている手口について興味があります。

1
NULLを含むセットでNOT INが常にFALSE / NULLを返すのはなぜですか?
NOT IN場合によってはNULL値を返すサブクエリを含む句を含むクエリ(PostgresおよびInformix)があり、その句(およびクエリ全体)が何も返さないことがありました。 これを理解する最良の方法は何ですか?私NULLは値のないものと考えていたため、クエリが失敗することを期待していませんでしたが、明らかにそれは正しい考え方ではありませんNULL。

2
GROUP BY B、AとGROUP BY COALESCE(B、A)の違い
私は自分自身を非常に混乱させてきました。 GROUP BY COALESCEを使用したい状況を誰かが親切に説明できますか? 私の推測では、列B(Bがnullでない場合)によってデータのセットを条件付きでグループ化し、それ以外の場合は列Aによってグループ化する場合に使用します。それは正しいですか?
20 oracle  query 

3
SQLクエリコードの繰り返しを防ぐために、文字列を連結したり、手続きを行ったりする代わりになりますか?
免責事項:データベースを使用する作業時間のごく一部としてのみ、私と一緒に我慢してください。(ほとんどの場合、仕事でC ++プログラミングを行いますが、奇数月ごとにOracleデータベースで何かを検索/修正/追加する必要があります。) アドホッククエリとアプリケーションに組み込まれたクエリの両方で、クエリの大部分が「コード」を繰り返しただけの複雑なSQLクエリを繰り返し書く必要がありました。 伝統的なプログラミング言語で、そのような憎むべきを書く深いトラブルにあなたを得るでしょう、まだI(Iは)まだSQLクエリコードの繰り返しを防ぐために、まともな手法を見つけることができませんでした。 編集:最初に、元の例に優れた改善を提供してくれた回答者に感謝します。ただし、この質問は私の例に関するものではありません。SQLクエリの反復性についてです。そのため、これまでの回答(JackP、Leigh)は、より良いクエリを作成することで反復性を減らすことができることを示す素晴らしい仕事をしています。ただし、その場合でも、明らかに削除できない反復性に直面します。これは、常にSQLに悩まされます。「従来の」プログラミング言語では、コードの反復性を最小限に抑えるためにかなり多くのリファクタリングを行うことができますが、SQLでは、これを可能にする(?)ツールはないようです。 Oracleタグを再度削除したことに注意してください。これは、データベースやスクリプト言語が存在しないかどうかに興味があるためです。 今日私が一緒に石畳を作ったそのような宝石の一つです。基本的に、単一のテーブルの列セットの違いを報告します。次のコードをざっと読んでください。最後に大きなクエリ。以下に続きます。 -- -- Create Table to test queries -- CREATE TABLE TEST_ATTRIBS ( id NUMBER PRIMARY KEY, name VARCHAR2(300) UNIQUE, attr1 VARCHAR2(2000), attr2 VARCHAR2(2000), attr3 INTEGER, attr4 NUMBER, attr5 VARCHAR2(2000) ); -- -- insert some test data -- insert into TEST_ATTRIBS values ( 1, …

7
Postgresqlクエリで連続した複数の範囲の開始と終了を効率的に選択する
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 名前と整数が1〜288の範囲のテーブルには、約10億行のデータがあります。指定されたnameに対して、すべてのintは一意であり、範囲内のすべての可能な整数が存在するわけではないため、ギャップがあります。 このクエリは、サンプルケースを生成します。 --what I have: SELECT * FROM ( VALUES ('foo', 2), ('foo', 3), ('foo', 4), ('foo', 10), ('foo', 11), ('foo', 13), ('bar', 1), ('bar', 2), ('bar', 3) ) AS baz ("name", "int") 名前と連続した整数のシーケンスごとに行を持つルックアップテーブルを生成したいと思います。そのような各行には以下が含まれます。 名前 -値の名前の列 開始 連続シーケンス内の最初の整数- エンド -連続するシーケンスの最後の値 スパン - エンド-スタート+ 1 このクエリは、上記の例の出力例を生成します。 …
19 query  postgresql 


7
データベースからアプリのデータを更新する唯一の方法はポーリングですか?
アプリケーションは、できるだけデータベースから最新のデータを更新する必要があります。そのような場合、タイマーベースのデータベースの要求(ポーリング)の他に、データを取得する他の方法はありますか? 私はMS SQL Server 2008(および.NETアプリケーション+ Entity Framework)を使用していますが、他の種類のデータベースについても知りたいです。

3
SQL Server 2008 R2の長時間実行クエリまたはデッドロックに関する通知
デッドロック時に通知を送信する方法があるかどうか知りたいですか?その場合、どのクエリが必要になるでしょう。SQL Serverはデッドロックを処理することを理解しています。関連するクエリに関する情報が欲しいだけです。 長時間実行されるクエリを特定するために、次のことがわかりました。 SELECT creation_time ,last_execution_time ,total_physical_reads ,total_logical_reads ,total_logical_writes , execution_count , total_worker_time , total_elapsed_time , total_elapsed_time / execution_count avg_elapsed_time ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) + 1) AS statement_text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st where total_elapsed_time >= …
15 query  deadlock 

4
複数の行の列を単一の行に結合する
私はいくつか持っているcustomer_commentsため、データベースの設計に複数の行に分割して、レポートのために私は結合する必要がありcomments、それぞれ独自のからをid1行に。以前、SELECT句とCOALESCEトリックからのこの区切りリストで動作するものを試しましたが、思い出せず、保存してはいけません。この場合も動作するようには思えませんが、1行でしか動作しないようです。 データは次のようになります。 id row_num customer_code comments ----------------------------------- 1 1 Dilbert Hard 1 2 Dilbert Worker 2 1 Wally Lazy 私の結果は次のようにする必要があります。 id customer_code comments ------------------------------ 1 Dilbert Hard Worker 2 Wally Lazy そのため、row_num実際にはそれぞれ1行の結果しかありません。コメントはの順序で結合されるべきですrow_num。上記のリンクされたSELECTトリックは、特定のクエリのすべての値を1つの行として取得するために機能しますが、SELECTこれらすべての行を吐き出すステートメントの一部として機能する方法を理解することはできません。 私のクエリは、テーブル全体を単独で調べて、これらの行を出力する必要があります。私はそれらを複数の列(各行に1つ)に結合してPIVOTいませんので、適用できないようです。

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' …

3
クエリチャレンジ:行数ではなくメジャーに基づいて、均一なサイズのバケットを作成する
可能な限り均等に、一定数のトラックに注文を積むという観点から問題を説明します。 入力: @TruckCount - the number of empty trucks to fill セット: OrderId, OrderDetailId, OrderDetailSize, TruckId (initially null) Ordersは1つ以上で構成されますOrderDetails。 ここでの課題は、TruckId各レコードにを割り当てることです。 1つの注文を複数のトラックに分割することはできません。 トラックは、で測定し、可能な限り均等に*積む必要がありますsum(OrderDetailSize)。 *均等:最小積載量のトラックと最大積載量のトラック間の達成可能な最小のデルタ。この定義により、1,2,3は1,1,4よりも均等に分散されます。役立つ場合は、統計アルゴリズムになり、高さのヒストグラムも作成します。 トラックの最大積載量は考慮されていません。これらは魔法の弾力性のあるトラックです。ただし、トラックの数は固定されています。 明らかに反復的な解決策があります-ラウンドロビンは注文を割り当てます。 しかし、それはセットベースのロジックとして実行できますか? 私の主な関心は、SQL Server 2014以降です。しかし、他のプラットフォーム用のセットベースのソリューションも興味深いかもしれません。 これは、Itzik Ben-Ganの領土のように感じます:) 私の実際のアプリケーションでは、処理ワークロードを論理CPUの数に合わせて多数のバケットに分散しています。したがって、各バケットには最大サイズはありません。特に統計の更新。チャレンジを組み立てる方法として、問題をトラックに抽象化する方が楽しいと思いました。 CREATE TABLE #OrderDetail ( OrderId int NOT NULL, OrderDetailId int NOT NULL PRIMARY KEY, OrderDetailSize tinyint NOT NULL, …

3
クエリパフォーマンスチューニング
クエリ/ストアドプロシージャ/関数の作成が完了したら、パフォーマンスパラメータをすばやく取得する最も有益な方法は何ですか?クエリを実行し、実際の実行計画を表示しますか?もしそうなら、あなたが探しているものは何ですか?明らかにテーブル/インデックススキャンはビットヒットですが、他には何がありますか?

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