データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A

4
PostgreSQLクエリがどれくらい進んでいるかを調べるにはどうすればよいですか?
SELECT ... INTOクエリが実際に処理する行の数については、かなりまともな考えがあります(たとえば、何行が具体化されるかがわかります)。 Postgresは完全なパーセンテージを教えてくれないことを理解していますが、宛先テーブルにポンプで送られた行またはSELECTクエリによって読み取られた行数を見つけることができる方法(ログ、システムテーブルなどに深く埋め込まれている)があります?
35 postgresql 

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
MysqlでVIEWのDEFINERを変更するにはどうすればよいですか?
mysqldumpを実行すると、エラーが発生します。 mysqldump: Got error: 1449: The user specified as a definer ('root'@'foobar') does not exist when using LOCK TABLES foobarもはや存在しないレガシーマシンであるため、これは理にかなっています。 すべてのテーブルの定義者を「root」@「localhost」に変更するにはどうすればよいですか?

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

5
PostgreSQLでの同時DELETE / INSERTのロックの問題
これは非常に簡単ですが、PG(v9.0)の機能に困惑しています。簡単な表から始めます。 CREATE TABLE test (id INT PRIMARY KEY); 数行: INSERT INTO TEST VALUES (1); INSERT INTO TEST VALUES (2); お気に入りのJDBCクエリツール(ExecuteQuery)を使用して、2つのセッションウィンドウをこのテーブルが存在するdbに接続します。両方ともトランザクション対応です(つまり、auto-commit = false)。それらをS1およびS2と呼びましょう。 それぞれに同じコードのビット: 1:DELETE FROM test WHERE id=1; 2:INSERT INTO test VALUES (1); 3:COMMIT; 次に、これをスローモーションで実行し、ウィンドウで1つずつ実行します。 S1-1 runs (1 row deleted) S2-1 runs (but is blocked since S1 has a write …


8
INNER JOINとOUTER JOINの違いは何ですか?
私はSQLを初めて使用しますが、これら2つのJOINタイプの違いを知りたいですか? SELECT * FROM user u INNER JOIN telephone t ON t.user_id = u.id SELECT * FROM user u LEFT OUTER JOIN telephone t ON t.user_id = u.id いつどちらを使用すればよいですか?
35 join 

3
JSONをSQLiteに保存およびクエリできますか?
JSONオブジェクトをSQLiteデータベースに保存してから、複雑なクエリを実行する必要があります。 私はこのようなテーブルを作りました: +--------------------------------------+ |document | property | string | number| +--------------------------------------+ |foo | "title" | "test" | | +--------------------------------------+ |foo | "id" | | 42 | +--------------------------------------+ |bar | "id" | | 43 | +--------------------------------------+ 2つのオブジェクト用 foo {"title": "test", "id": 42} bar {id: 43} ただし、次のような「AND」クエリは実行できません。 SELECT DISTINCT id FROM table …
35 sqlite  json 

6
log_bin変数を使用してMySQLバイナリロギングを無効にする
デフォルトのMySQL構成ファイル/etc/mysql/my.cnfは、APTを使用してdebianパッケージによってインストールされることが多く、log_bin変数を設定するため、binlogが有効になります。 log_bin = /var/log/mysql/mysql-bin.log そのようなインストールでバイナリログを無効にしたい場合、my.cnfの行をコメントアウトしますが、debianスタイルで明示的にlog_binをOFFに設定してバイナリログを無効にする方法があるのでしょうか? /etc/mysql/conf.d/myCustomFile.cnfのようなインクルードファイル。デフォルトのmy.cnfは変更されず、必要に応じてaptで簡単に更新できます。 「log_bin = 0」、「log_bin = OFF」または「log_bin = "を試しましたが、どれも機能しません...
35 mysql  logs  binlog  debian 


3
シェルからストレージエンジンを確認する
3.0にアップグレードしようとすると、アップグレードでいくつかの問題が発生しました。具体的には、mongod経由sshで起動しようとするとエラーが発生しましたdbpath。新しいYAML構成ファイルで指定したものの代わりにデフォルトを使用しようとしました。私は先に進み、マシンを再起動しましたが、今mongodは再び稼働しています。私はこの時点で少し妄想的で、ストレージエンジンがwiredtigerシェルからのものであることを確認する方法があるかどうかを知りたいです。

2
セット内の2つの列の場所を選択する
これはばかげた質問かもしれません。私の疑いはこれができないということですが、SQLには次のようなことができる構造があります。 SELECT whatever WHERE col1,col2 IN ((val1, val2), (val1, val2), ...) 2つの列がペアになっているデータを選択したい。 可能であれば、サブクエリの使用を避けたいです。
35 mysql  where 

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 …

1
JOIN句にUSING構文を使用すると、特定の場合に最適化の障壁が生じる可能性がありますか?
クエリの節のUSING(ではなくON)コンストラクトが、FROMSELECT一定の場合には、最適化の障壁を導入することがあります。 私はこのキーワードを意味します: 選択* から 参加b 使用した(A_ID) より複雑な場合にのみ。 コンテキスト:このコメントにこの質問。 私はこれをよく使いますが、これまでに気づいたことはありません。効果やリンクを示すテストケースに非常に興味があります詳細情報にます。私の検索努力は空っぽになりました。 完璧な答えは、表示するために、テストケースとなりUSING (a_id)、代替句に参加すると比較して劣った性能をON a.a_id = b.a_id- 場合はそれが実際に起こることができます。

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