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

ディスクスペースを犠牲にしてクエリの速度を向上させ、挿入/更新を遅くすることができるデータベース構造。ソートされた1つ以上の列のコピーを格納しますが、データを異なる方法で構造化して、より高速なアクセスを可能にします。

2
「ビットマップヒープスキャン」と「ビットマップインデックススキャン」を理解する
私の誤解を次の例で説明します。 の基本を理解していませんでしたBitmap Heap Scan Node。SELECT customerid, username FROM customers WHERE customerid < 1000 AND username <'user100';計画がこれであるクエリを検討してください。 Bitmap Heap Scan on customers (cost=25.76..61.62 rows=10 width=13) (actual time=0.077..0.077 rows=2 loops=1) Recheck Cond: (((username)::text < 'user100'::text) AND (customerid < 1000)) -> BitmapAnd (cost=25.76..25.76 rows=10 width=0) (actual time=0.073..0.073 rows=0 loops=1) -> Bitmap Index Scan …
36 postgresql  index 

4
PostgreSQLでのインデックス構築の進行状況の監視
PostgreSQLのインデックス作成の進行状況を監視する方法はありますか。私は大きなテーブルにインデックスを作成していますが、これがどのくらいの速さで起こっているのかを見たいです。 これを監視する方法はありますか?
36 postgresql  index 

3
MD5フィールドに最適なデータ型は何ですか?
読み取りが多いことがわかっているシステムを設計しています(1分あたり数万回の読み取り)。 names一種の中央レジストリとして機能するテーブルがあります。各行には、textフィールドrepresentationとkeyそのMD5ハッシュである一意のフィールドがありますrepresentation。1現在、このテーブルには数千万のレコードがあり、アプリケーションの存続期間中に数十億に達すると予想されています。 テーブルを参照する他の(スキーマとレコード数が非常に異なる)テーブルは多数ありnamesます。これらのテーブルのいずれかのレコードにname_keyは、機能的にはnamesテーブルへの外部キーであるが含まれることが保証されています。 1:ちなみに、ご想像のとおり、このテーブルのレコードは一度書き込まれると不変です。 テーブル以外の特定のnamesテーブルでは、最も一般的なクエリは次のパターンに従います。 SELECT list, of, fields FROM table WHERE name_key IN (md5a, md5b, md5c...); 読み取りパフォーマンスを最適化したいと思います。私が最初にやるべきことは、インデックスのサイズを最小化することだと思います(ただし、間違っていると証明されてもかまいません)。 質問: /に最適なデータ型は何ですかれるkeyとname_key、列?以上 を使用する理由はありますか?または?hex(32)bit(128)BTREEGIN


2
列ごとの順序にはインデックスが必要ですか?
結果の検索に使用されるインデックスをテーブルに追加しました。ASCまたはDESCの順序で結果を表示しています。その列にはインデックスが必要ですか?そのテーブルにはさらに2つのインデックスがあります。その列にインデックスを作成するかどうかによって、パフォーマンスはどのように影響しますか?

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 

7
テーブルの完全な構造をコピーする
いくつかの方法を使用すると、テーブルのコピーを作成すると、インデックス、PK、FKなどが失われます。たとえば、SQL Serverでは次のように言えます。 select * into dbo.table2 from dbo.table1; これは、テーブルの単純なコピーです。すべてのインデックス/制約がありません。(バックアップを使用せずに)テーブル構造をコピーするにはどうすればよいですか? 私は主にこれを手動で行うことを探していますが、それが不可能な場合は、任意の解決策を受け入れます。


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 …

2
複数列のインデックスとパフォーマンス
複数列のインデックスを持つテーブルがあり、クエリのパフォーマンスを最大にするためのインデックスの適切な並べ替えについて疑問があります。 シナリオ: PostgreSQL 8.4、約100万行のテーブル 列c1の値には、約100の異なる値を指定できます。値は均等に分布していると想定できるため、可能な値ごとに約10000行あります。 列c2には1000個の異なる値を指定できます。可能な値ごとに1000行あります。 データを検索するとき、条件には常にこれら2つの列の値が含まれるため、テーブルにはc1とc2を組み合わせた複数列のインデックスがあります。フィルタリングに1列のみを使用するクエリがある場合、複数列インデックスの列を適切に順序付けることの重要性について読みました。これは、このシナリオには当てはまりません。 私の質問はこれです: フィルターの1つが非常に小さなデータセットを選択するという事実を考えると、最初のインデックスが最も選択的なインデックス(より小さなセットを許可するインデックス)である場合、パフォーマンスを改善できますか?参照記事のグラフィックを見るまで、この質問を考えたことはありませんでした。 複数列インデックスについての参照記事から抜粋した画像。 クエリは、フィルタリングに2つの列の値を使用します。フィルタリングに1列のみを使用するクエリはありません。それらはすべて次のとおりWHERE c1=@ParameterA AND c2=@ParameterBです。次のような条件もあります。WHERE c1 = "abc" AND c2 LIKE "ab%"

1
外部キーのインデックスが必要
私はインデックス、プライマリキー、外部キーに苦労しています...そしてそれらすべてを持つ必要があります。 2つのテーブルがある場合、両方ともプライマリキーとして整数を持ちます。 最初のテーブルは、FKを介して2番目のテーブルの主キーを参照します。 両方のテーブルで、ID列に主キーインデックスがあります table1.ref_field2番目のテーブルのPKを参照するFK制約を作成しました(table2.id) にインデックスを追加しました table1.ref_field これは、これらのインデックス、プライマリキー、外部キーを整理する最良の方法ですか?

1
すべての値が36文字の場合、char vs varcharを使用すると、インデックスルックアップは著しく高速になりますか
すべてのテーブルのプライマリキーにハッシュベースの生成されたIDを使用するレガシースキーマ(免責事項!)があります(多数あります)。このようなIDの例は次のとおりです。 922475bb-ad93-43ee-9487-d2671b886479 このアプローチを変更する可能性はありませんが、インデックスアクセスのパフォーマンスは低下します。これが無数にある理由は別として、多くのテーブルのすべてのid値が正確に36文字の長さであるにもかかわらず、列タイプはvarchar(36)でなく 、最適ではないように思われることが1つありchar(36)ます。 固定長に列の型を変更することだろうchar(36)任意の提供の重要なインデックスページなどあたりのエントリの数が非常に少ないの増加を超えて、インデックスのパフォーマンス上の利点? つまり、固定長型を扱う場合、可変長型よりもpostgresの方がはるかに高速ですか? わずかなストレージの節約については言及しないでください-列に変更を加えるために必要な手術と比較しても問題にはなりません。

2
大規模なINを使用したPostgresクエリの最適化
このクエリは、フォローしている人が作成した投稿のリストを取得します。フォローできる人の数に制限はありませんが、ほとんどの人は1000人未満をフォローしています。 このスタイルのクエリでは、明らかな最適化は"Post"ID をキャッシュすることですが、残念ながら今のところその時間はありません。 EXPLAIN ANALYZE SELECT "Post"."id", "Post"."actionId", "Post"."commentCount", ... FROM "Posts" AS "Post" INNER JOIN "Users" AS "user" ON "Post"."userId" = "user"."id" LEFT OUTER JOIN "ActivityLogs" AS "activityLog" ON "Post"."activityLogId" = "activityLog"."id" LEFT OUTER JOIN "WeightLogs" AS "weightLog" ON "Post"."weightLogId" = "weightLog"."id" LEFT OUTER JOIN "Workouts" AS "workout" ON …

3
インデックスREBUILDがインデックスの断片化を軽減しないのはなぜですか?
ALTER INDEX REBUILDを使用して、インデックスの断片化を削除しました。場合によっては、REBUILDはこのフラグメンテーションを削除しないようです。REBUILDがフラグメンテーションを削除しない理由は何ですか?これは特に小さなインデックスで発生するようです。

4
空間インデックスは「範囲-順序-制限」クエリに役立ちますか
R-tree / spatialインデックスに適しているので、特にPostgresに対してこの質問をすること。 次の表に、単語とその頻度のツリー構造(ネストされたセットモデル)を示します。 lexikon ------- _id integer PRIMARY KEY word text frequency integer lset integer UNIQUE KEY rset integer UNIQUE KEY そしてクエリ: SELECT word FROM lexikon WHERE lset BETWEEN @Low AND @High ORDER BY frequency DESC LIMIT @N カバリングインデックス(lset, frequency, word)が有効であると思いlsetますが、(@High, @Low)範囲内の値が多すぎるとうまく機能しない可能性があります。 (frequency DESC)そのインデックスを使用した検索@Nが範囲条件に一致する行を早期に生成する場合、単純なインデックスで十分な場合もあります。 しかし、パフォーマンスはパラメーター値に大きく依存するようです。 範囲(@Low, @High)が広いか狭いかに関係なく、また、頻度の高い単語が幸運にも選択された範囲内にあるかどうかにかかわらず、高速に実行する方法はありますか? Rツリー/空間インデックスは役立ちますか? インデックスの追加、クエリの書き換え、テーブルの再設計、制限はありません。

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