問題タブ [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.
postgresql - この場合、Postgresql が複合インデックスで Index Only Scan を使用しないのはなぜですか?
私のテーブルには整数列「a」、「b」があります。"a" の異なる値はわずか (<30) ですが、各 "a" には膨大な数の異なる "b" が存在します (>10**7)。スピードアップするために、複合インデックス (a,b) を作成しました。私はそれを観察します
速く走る
速く走るが、
実行が (なんてこった) 遅く、同じことが次の場合にも当てはまります
説明を実行すると、高速クエリが使用することが説明されます
ただし、遅いクエリの場合は、シーケンシャル スキャンが使用されます。
これはなぜですか?Postgresql が後の 2 つのクエリに同じインデックスを使用しないのはなぜですか? クエリ プランナーの不完全性だけですか、それともインデックス オンリー スキャンを使用できないより深刻な理由がありますか?
mysql - 複合インデックスのオーバーヘッド
外部キーのインデックスと、それらの外部キーを含むクラスター化インデックスを持つ多くのテーブルがあります。たとえば、次のようなテーブルがあります。
MySQL は主キーと外部キーのインデックスを生成しますが、クエリのパフォーマンスを向上させたい場合があるため、クラスター化インデックスまたはカバリング インデックスを作成します。これにより、列が重複するインデックスが作成されます。
を削除した場合idx_owner
、通常使用する将来のクエリは、インデックスの最初の列として使用するidx_owner
だけです。idx_owner_status
owner
持ち歩く価値はありidx_owner
ますか?idx_owner_status
MySQL がインデックスの一部しか使用しない場合でも、使用する追加の I/O オーバーヘッドはありますか?
編集:私は本当にInnoDBがインデックスに関してどのように動作するかにのみ興味があります。
sql - インデックスのない列を選択すると、複合インデックスが無視される (Oracle)
when句の一部がis nullになる単純な結合ステートメントがあります。ステートメントはアプリケーションによって生成されます。this is null制約があると、クエリ プランに問題が発生します。StackExchange の記事で説明されているアプローチに従い、列の複合インデックス (null 許容型と結合するインデックス) を作成しました。インデックス付きの列のみを選択する場合にのみ役立ちます。インデックスのない列を選択すると、それは無視されますが、クエリの結果は同じです (行が選択されていないなど)。
私たちが見る唯一のオプションは、アプリケーションのロジックを変更することですが、これをデータベースレベルで解決する方法がまだあるのでしょうか?
次に、計画を確認します。
1.
Plan1 - 範囲スキャン
2.
Plan2 (上記と同じリンク) - 全表スキャン
クエリを変更する、よりスマートなインデックスを使用する、固定計画を適用するなど、パフォーマンスを向上させる最善の方法はどれでしょうか?
*更新* この質問を準備している間に、サンプルの計画が自動的に変更されました。現在、 Plan2 の代わりにPlan2*があります - 完全なテーブル スキャンはありません。ただし、サンプルを再作成すると (テーブルを削除して再度準備する)、プランは再び Plan2 (フル テーブル スキャン) になります。このトリックは、実際の DB では発生しません。
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
mysql - InnoDB 複合インデックスの順序と INSERT パフォーマンス
複数列インデックスを使用したい 3 つの列を持つ MySQL テーブルがあります。列 A は TINYINT、B は SMALLINT、C は VARBINARY (16) です。最大のINSERT速度を達成するには、AはBよりも粒度が低く、BはCよりも低いため、インデックスをA、B、Cとして使用する必要がありますか?
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 のデータがたくさんあります
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 の複合インデックスを作成する方法はありますか? 私を助けてください。前もって感謝します。
編集:このクエリの生産について説明します:
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 を使用して作成された複合インデックスを次に示します。
この件に関するヘルプをいただければ幸いです!!
追加情報が必要な場合はお知らせください