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

有用なインデックスと有用でないインデックスを決定するプロセス。

3
PostgreSQLはインデックスにnullを使用できますか?
私はそれを言っているこの本を読んでいます データベースは、Indexed_Col IS NOT NULLがカバーする範囲が大きすぎて役に立たないと想定しているため、データベースはこの状態からインデックスに移動しません。 この本は10年以上前のものであると認識していますが、すでに非常に有用であることが証明されています。 さらに、クエリを実行EXPLAIN ANALYZEしSELECTているときに、自分のインデックスがまったく使用されていないことがわかりました。 したがって、私の質問は: 列が "NOT NULL"を含む列を持つテーブルがあり、この列をカバーするインデックスが存在する場合、このインデックスは、列がクエリの一部であるテーブルのクエリで使用されますか? お気に入り: CREATE TABLE my_table( a varchar NOT NULL ); CREATE INDEX ix_my_table ON my_table(a); SELECT a from my_table;

1
クエリのパフォーマンスが悪い
処理するデータ量に応じて、通常0.5〜6.0秒で実行される大きな(10,000行以上)手順があります。過去1か月間で、FULLSCANで統計を更新してから30秒以上かかりました。速度が低下すると、sp_recompileは問題を「修正」し、夜間統計ジョブが再度実行されるまで待機します。 低速と高速の実行プランを比較することで、特定のテーブル/インデックスに絞り込みました。実行速度が遅い場合は、特定のインデックスから約300行が返されると推定され、実行速度が速い場合は1行と推定されます。実行速度が遅い場合はインデックスでシークを行った後にテーブルスプールを使用し、実行速度が速い場合はテーブルスプールを実行しません。 DBSS SHOW_STATISTICSを使用して、インデックスヒストグラムをExcelでグラフ化しました。私は通常、グラフがより「ローリングヒル」であると予想しますが、代わりにそれは山のように見え、最高点はグラフ上の他のほとんどの値よりも2倍から3倍高くなります。 FULLSCANなしで統計を更新すると、より正常に見えます。その後、もう一度FULLSCANで実行すると、上記のように見えます。 これは、パラメータスニッフィングの問題のように感じられ、特に上記の(一見)奇妙なインデックス分布に関連しています。 プロシージャはテーブル値パラメーターを受け取りますが、パラメーター値パラメーターでパラメーターのスニッフィングを行うことができますか? 編集:プロシージャは、他に12個のパラメーターも受け取ります。そのうちのいくつかはオプションで、そのうちの2つは開始日と終了日です。 ヒストグラムは奇妙ですか、それとも間違ったツリーを吠えていますか? クエリを調整したり、インデックスを調整したりすることは確かに快適です。それがすばらしい修正である場合、その時点での私の質問は、歪んだヒストグラムについての詳細です。 これはPK IDENTITYクラスター化インデックスであることを述べておきます。互いに通信する2つのシステムがあり、1つはレガシーシステムで、もう1つは新しい自家製システムです。どちらのシステムも同様のデータを保存します。新しいシステムのこのテーブルのPKを同期させるために、古いシステムにデータが追加されない場合でも(RESEEDが実行された場合でも)、PKが増加します。したがって、この列の番号付けにいくつかのギャップがある可能性があります。レコードが削除されることはほとんどありません。 どんな考えでも大歓迎です。より多くの情報を収集/含めることができて、とてもうれしいです。

4
広範なPKを使用する場合と、個別の合成キーおよびUQを使用する場合のパフォーマンスに関する考慮事項は何ですか?
レコードがいくつかの広範なビジネス分野で一意に識別できるいくつかのテーブルがあります。過去に、これらのフィールドをPKとして使用しましたが、これらの利点を考慮しています。 シンプルさ。無関係なフィールドはなく、インデックスは1つだけです クラスタリングにより、高速マージ結合と範囲ベースのフィルターが可能になります ただし、合成IDENTITY INTPK を作成し、代わりに別のUNIQUE制約を使用してビジネスキーを強制するケースについて聞いたことがあります。利点は、PKが狭いため、セカンダリインデックスがはるかに小さくなることです。 テーブルにPK以外のインデックスがない場合、2番目のアプローチを採用する理由はありませんが、大きなテーブルでは、インデックスが将来必要になる可能性があると想定して、狭い合成PKを採用することをお勧めします。 。考慮事項が不足していますか? ちなみに、私はデータウェアハウスで合成キーを使用することに反対しているのではなく、単一の広いPKを使用する場合と、狭いPKと広いUKを使用する場合にのみ関心があります。

1
クラスタ化インデックスシークと非クラスタ化インデックスシークの違い
クラスタ化インデックス(CI)シークと非クラスタ化インデックス(NCI)シークの違いは何ですか?一方が他方よりもパフォーマンスが良いですか? これを尋ねる理由は、5,000万行と150列のテーブルがあるためです。これにはID、クラスター化インデックスとして定義された名前の列があります。同じインデックスキーIDと7つのinclude-d列を持つNCIがもう1つあります。NCインデックスはここでは重複しており、安全に削除できるようです。 安全にドロップできる場合、またはそのままにしておく必要がある場合は、専門家の意見/アドバイスが必要ですか?

1
非常に小さなテーブル(最大1000行)にインデックスを使用する理由はありますか?
アプリケーション開発時に、私はテーブルの多くを持っている(通常は10〜40個の値、データのストア「小さな」量id+ value時々とtype同様に、「オブジェクト」の属性ホールド)新鮮/腐った、赤/緑/青の製品について。 電子コンポーネントを新しくすることはできず、酸素ガスを赤くすることはできず、テーブルは無制限の行数を持つことができないので、この属性を製品テーブルに入れません... 属性を格納するために、私は、カスタム小さなテーブルを使用します。ここで、2-3フィールド:id、リンクするためのnameアプリケーションで表示するためといつかtype同じカテゴリ内の属性グループ場合。 主要な「オブジェクト」は、中間の多対多のテーブルを介して属性にリンクされています。 アイテム数が1000未満(通常は10〜40)の「小さな辞書」のインデックスを作成して維持する理由はありますか? 私のターゲットデータベースはOracleですが、ベンダーに依存しないことを願っています... 私は記入-いいえ、しかし私の記入を正当化する技術的スキルはありません...



1
インデックス列の順序のWHERE-JOIN-ORDER-(SELECT)ルールは間違っていますか?
より大きなクエリの一部であるこの(サブ)クエリを改善しようとしています。 select SUM(isnull(IP.Q, 0)) as Q, IP.OPID from IP inner join I on I.ID = IP.IID where IP.Deleted=0 and (I.Status > 0 AND I.Status <= 19) group by IP.OPID Sentry Plan Explorerは、上記のクエリによって実行された、テーブルdbo。[I]の比較的コストのかかるキールックアップを指摘しました。 テーブルdbo.I CREATE TABLE [dbo].[I] ( [ID] UNIQUEIDENTIFIER NOT NULL, [OID] UNIQUEIDENTIFIER NOT NULL, [] UNIQUEIDENTIFIER NOT NULL, [] …

1
CLUSTERのパフォーマンスへの影響
Postgres 9.2データベースを最適化して、日付制限のあるクエリを高速化しようとしています。 私はtimestamp列を持っていますが、たいていはいつか尋ねているのでtimestamp、date解析するためのインデックスを作成しました: CREATE INDEX foo_my_timestamp_idx ON foo USING btree ((my_timestamp::date) DESC); 次に、パフォーマンスを向上させるために、CLUSTER foo上記のインデックスを使用してテーブルを作成します。 CLUSTER foo USING foo_my_timestamp_idx; SQL-CLUSTERのマニュアルによると、テーブル インデックス情報に基づいて物理的に並べ替えられます テーブルのPKを使用する他のクエリのパフォーマンスに影響があるかどうかを知ります(としましょうid_foo)。欠点はありますか?

3
複数の結合を使用したクエリのチューニング
私はこのクエリを持っています.. 214実行/分、44.42平均CPU(ms)はそれをはるかに速くする方法があります SELECT P.Id id0, P.ProgramId ProgramId1, P.ProgramName ProgramName2, P.ProgramLevel ProgramLevel3, P.Department Department4, P.Track Track5, P.AcademicYear AcademicYear6, P.StartTerm StartTerm7, P.Delivery Delivery8, P.Fee Fee9, P.City City10, P.STATE State11, P.StartDate StartDate12, P.Deadline Deadline13, P.DeadlineDisplay DeadlineDisplay14, P.ProgramType ProgramType15, O.Id as OrganizationId16, O.NAME OrganizationName17, P.ApplicationType ApplicationType18, P.Concentration Concentration19, P.ZipCode ZipCode20, P.Campus Campus21, P.WADisplayName WADisplayName22, …

3
インデックス調整の質問
私はいくつかのインデックスを調整していて、いくつかの問題があなたのアドバイスを望んでいるのを見ています 1つのテーブルに3つのインデックスがあります dbo.Address.IX_Address_ProfileId [1 KEY] ProfileId {int 4} Reads: 0 Writes:10,519 dbo.Address.IX_Address [2 KEYS] ProfileId {int 4}, InstanceId {int 4} Reads: 0 Writes:10,523 dbo.Address.IX_Address_profile_instance_addresstype [3 KEYS] ProfileId {int 4}, InstanceId {int 4}, AddressType {int 4} Reads: 149677 (53,247 seek) Writes:10,523 1-最初の2つのインデックスは本当に必要ですか、それとも削除する必要がありますか? 2- profileid = xxxxである使用条件を実行するクエリと、profileid = xxxxおよびInstanceID = xxxxxxである他の使用条件があります。オプティマイザが1番目または2番目ではなく3番目のインデックスを選択する理由 また、各インデックスでロック待機を取得するクエリを実行しています。これらのカウントを取得している場合、このインデックスを調整するにはどうすればよいですか? …

2
使用されていないがクエリに影響を与えるインデックス
いくつかの数値といくつかの追加データを含むPostgreSQL 9.3テーブルがあります。 CREATE TABLE mytable ( myid BIGINT, somedata BYTEA ) このテーブルには現在約1,000万のレコードがあり、1GBのディスク容量を使用します。myid連続していません。 100000の連続番号の各ブロックにある行の数を計算したいと思います。 SELECT myid/100000 AS block, count(*) AS total FROM mytable GROUP BY myid/100000; これは約3500行を返します。 クエリプランでまったく言及されていなくても、特定のインデックスが存在すると、このクエリが大幅に高速化されることに気づきました。インデックスなしのクエリプラン: db=> EXPLAIN (ANALYZE TRUE, VERBOSE TRUE) SELECT myid/100000 AS block, count(*) AS total FROM mytable GROUP BY myid/100000; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------- GroupAggregate (cost=1636639.92..1709958.65 …


3
行バージョンで並べ替えられたデータのフィルタリング
次の構造のSQLデータテーブルがあります。 CREATE TABLE Data( Id uniqueidentifier NOT NULL, Date datetime NOT NULL, Value decimal(20, 10) NULL, RV timestamp NOT NULL, CONSTRAINT PK_Data PRIMARY KEY CLUSTERED (Id, Date) ) 個別のIDの数は3000から50000の範囲です 。テーブルのサイズは10 億行を超えます。 1つのIDで、テーブルの5%までの数行をカバーできます。 このテーブルで最も実行されるクエリは次のとおりです。 SELECT Id, Date, Value, RV FROM Data WHERE Id = @Id AND Date Between @StartDate AND @StopDate …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.