問題タブ [composite-index]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
250 参照

postgresql - この場合、Postgresql が複合インデックスで Index Only Scan を使用しないのはなぜですか?

私のテーブルには整数列「a」、「b」があります。"a" の異なる値はわずか (<30) ですが、各 "a" には膨大な数の異なる "b" が存在します (>10**7)。スピードアップするために、複合インデックス (a,b) を作成しました。私はそれを観察します

速く走る

速く走るが、

実行が (なんてこった) 遅く、同じことが次の場合にも当てはまります

説明を実行すると、高速クエリが使用することが説明されます

ただし、遅いクエリの場合は、シーケンシャル スキャンが使用されます。

これはなぜですか?Postgresql が後の 2 つのクエリに同じインデックスを使用しないのはなぜですか? クエリ プランナーの不完全性だけですか、それともインデックス オンリー スキャンを使用できないより深刻な理由がありますか?

0 投票する
1 に答える
845 参照

mysql - 複合インデックスのオーバーヘッド

外部キーのインデックスと、それらの外部キーを含むクラスター化インデックスを持つ多くのテーブルがあります。たとえば、次のようなテーブルがあります。

MySQL は主キーと外部キーのインデックスを生成しますが、クエリのパフォーマンスを向上させたい場合があるため、クラスター化インデックスまたはカバリング インデックスを作成します。これにより、列が重複するインデックスが作成されます。

を削除した場合idx_owner、通常使用する将来のクエリは、インデックスの最初の列として使用するidx_ownerだけです。idx_owner_statusowner

持ち歩く価値はありidx_ownerますか?idx_owner_statusMySQL がインデックスの一部しか使用しない場合でも、使用する追加の I/O オーバーヘッドはありますか?

編集:私は本当にInnoDBがインデックスに関してどのように動作するかにのみ興味があります。

0 投票する
1 に答える
633 参照

sql - インデックスのない列を選択すると、複合インデックスが無視される (Oracle)

when句の一部がis nullになる単純な結合ステートメントがあります。ステートメントはアプリケーションによって生成されます。this is null制約があると、クエリ プランに問題が発生します。StackExchange の記事で説明されているアプローチに従い、列の複合インデックス (null 許容型と結合するインデックス) を作成しました。インデックス付きの列のみを選択する場合にのみ役立ちます。インデックスのない列を選択すると、それは無視されますが、クエリの結果は同じです (行が選択されていないなど)。 私たちが見る唯一のオプションは、アプリケーションのロジックを変更することですが、これをデータベースレベルで解決する方法がまだあるのでしょうか?


次に、計画を確認します。

1.

Plan1 - 範囲スキャン

2.

Plan2 (上記と同じリンク) - 全表スキャン

クエリを変更する、よりスマートなインデックスを使用する、固定計画を適用するなど、パフォーマンスを向上させる最善の方法はどれでしょうか?

*更新* この質問を準備している間に、サンプルの計画が自動的に変更されました。現在、 Plan2 の代わりにPlan2*があります - 完全なテーブル スキャンはありません。ただし、サンプルを再作成すると (テーブルを削除して再度準備する)、プランは再び Plan2 (フル テーブル スキャン) になります。このトリックは、実際の DB では発生しません。

0 投票する
3 に答える
343 参照

mysql - 複合インデックスの一番左の列のワイルドカードは、インデックスの残りの列がインデックス ルックアップ (MySQL) で使用されないことを意味しますか?

のプライマリ複合インデックスがあるとしlast_name,first_nameます。次に、 の検索を実行しましたWHERE first_name LIKE 'joh%' AND last_name LIKE 'smi%'

last_name 条件で使用されるワイルドカードは、MySQL がインデックスを見つけるのをさらに支援するために first_name 条件が使用されないことを意味しますか? つまり、last_name 条件にワイルドカードを配置すると、MySQL は部分的なインデックス ルックアップのみを実行します (そして、last_name の右側にある列で指定された条件を無視します)?

私が求めていることのさらなる明確化

例-1: 主キーはlast_name, first_nameです。
例-2: 主キーはlast_nameです。

この WHERE 句を使用するWHERE first_name LIKE 'joh%' AND last_name LIKE 'smi%'と、例 1 は例 2 よりも高速になりますか?

アップデート

ここにsqlfiddleがあります: http://sqlfiddle.com/#!9/6e0154/3

0 投票する
2 に答える
357 参照

mysql - InnoDB 複合インデックスの順序と INSERT パフォーマンス

複数列インデックスを使用したい 3 つの列を持つ MySQL テーブルがあります。列 A は TINYINT、B は SMALLINT、C は VARBINARY (16) です。最大のINSERT速度を達成するには、AはBよりも粒度が低く、BはCよりも低いため、インデックスをA、B、Cとして使用する必要がありますか?

0 投票する
1 に答える
1560 参照

mysql - mysqlの範囲クエリで複合インデックスを使用する方法

field1 と field2 の 2 つのフィールドを持つテーブル「test」と、field1_field2(field1, field2) を作成した複合インデックスがあります。ここにSQLがあります:select * from test force index(field1_field2) where field1 > 100 and field2 = 2 limit 200

そしてうまく動かない。私はそれを説明し、インデックスクエリで使用されるfield1条件のみが見つかり、field2条件は無視されました....

理由が知りたい 完璧な答えが欲しい

field1 > 100 のデータがたくさんあり、field2 = 2 のデータがたくさんあります

0 投票する
2 に答える
1996 参照

mysql - 複数の OR 条件と AND 条件を使用して選択クエリのインデックスを作成する

以下に示すようなクエリがあります。

table2.email、table2.phone1、table2.phone2、table2.created_at にインデックスがあります。これらはすべて単一インデックスであり、複合インデックスではありません。私の知る限り、(table2.email、table2.phone1、table2.phone2) の複合インデックスは、条件が OR 条件であるため機能しません。(table2.id、table2.created_at、table2.status、table2.is_test) に複合インデックスを作成しましたが、説明クエリで同じ結果が得られました。説明クエリを以下に示します

ここで、com_index は私が作成した複合インデックスです。このクエリを高速化するためにインデックスを作成するにはどうすればよいですか。説明の結果から、クエリ用に選択されたキーは created_at のようです。テーブル 2 の複合インデックスを作成する方法はありますか? 私を助けてください。前もって感謝します。

編集:このクエリの生産について説明します:

0 投票する
1 に答える
800 参照

c# - Google Cloud Datastore : Composite Index : Order by が機能しないようです

(C#).NETコードでGoogle Cloudデータストアを使用しています。次の列を持つAudit in Datastoreというテーブルがあります

ID/Name (long)、ID (long)、ActionType (String)、GroupType (String)、DateTime (TimeStamp)、CompanyID (long)、UserID (long)、ObjectID (long)、IsDeleted (boolean)

参考までに、ID/名前とIDの両方に同じ情報が含まれています

このようにGQLクエリを実行したい

SELECT * FROM Audit WHERE GroupType='XYZ' AND ActionType='CREATED' AND CompanyID=152738292 and IsDeleted=false ID 順

私は正しい複合キーを取得していないようで、「あなたのデータストアには、このクエリに必要な複合インデックス (開発者提供) がありません」というメッセージが表示され続けます。

index.yaml を使用して作成された複合インデックスを次に示します。

この件に関するヘルプをいただければ幸いです!!

追加情報が必要な場合はお知らせください