問題タブ [database-indexes]

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 に答える
3651 参照

nhibernate - Fluent NHibernate - プロパティを SQL Server の永続化された計算列にマップすることは可能ですか

Fluent NHibernate を使用して、読み取り専用プロパティを Sql Server の計算列にマップしたいと考えています。プロパティは、別のプロパティの部分文字列です。これを行うのは、部分文字列をインデックス可能にして、検索パフォーマンスを向上させるためです。しかし、マッピングでフォーミュラ関数を使用すると、プロパティはデータベースの計算列にマップされませんが、クエリを使用すると計算されます。

0 投票する
5 に答える
18234 参照

sql-server - SQL Server - 'ARITHABORT' が原因で INSERT が失敗しました

NHibernate と SQL Server 2005 を使用しており、テーブルの 1 つで計算列にインデックスを作成しています。

私の問題は、そのテーブルにレコードを挿入すると、次のエラーが発生することです。

次の SET オプションの設定が正しくないため、INSERT が失敗しました: 'ARITHABORT'

挿入の前に使用SET ARITHABORT ON;していますが、まだこのエラーがあります。

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

sql - これを機能させるには、いくつかのインデックススキームが必要です

Sqlite には、クエリごとに 1 つのインデックスしか使用しないという制限があります。現時点ではその制限に悩まされていますが、挿入速度を競うことができる他のローカル DB エンジンを認識していないため、Sqlite が必要です (ただし、提案は受け付けています)。

100万から1000万行のこの単純なテーブル(とりわけ)があります:

私のデータを見ると、一意の TelemetryId 値が約 2000 あり、一意の TelemetryId ごとに約 25000 行あります。私はこのインデックスを使用しています:

ただし、そのインデックスは、(明らかに) TimestampTicks 制約を渡さないクエリで失敗します。そのインデックスは、TimestampTicks と TelemetryId で個々のインデックスを試行した後のものです。私のテストから、そして を実行した後でもANALYZE、Sqlite は TelemetryId が参照されるたびにそのインデックスしか使用しませんでした。これは、Timestamp 範囲に制限しているクエリでは間違っています。コンボ インデックスの列の順序を逆にすると、以前は高速だったクエリが遅くなります。

これが私のクエリの完全なリストです。それらすべてで機能する索引付けスキームがわかりますか?

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

sql-server - SQL Server で文字列列の非クラスター化インデックスを作成するにはどうすればよいですか?

これを試してみたところ、役立つメッセージが表示されました

テーブル 'Users' の列 'Username' は、インデックスのキー列として使用するのに無効な型です。

ユーザー名は nvarchar(max) 列です。

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

sql - Sqlite がこの ORDER BY にインデックスを使用しないのはなぜですか?

私はこのクエリを持っています:

そして、私はこのインデックスを持っています:

ただし、インデックスは ORDER BY 句には使用されません。このクエリの説明を取得します。

なぜ B-TREE なのか? インデックスを逆にすると、実際にはパフォーマンスが低下します。そのクエリプランは次のとおりです。

その順序で TelemetryId の使用が許可されない理由がわかりません。このクエリをもっと速くする必要があります。何か助けはありますか?

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

postgresql - Postgre 文字列配列で大文字と小文字を区別しないインデックスを作成する

varchar[]Postgres 9.2 で列 (varchar 配列)を使用していくつかのタグを保存しています。タグで行を取得する際に、クエリで大文字と小文字を区別しないようにしたいと考えています。ただし、UI に表示する大文字と小文字を保持したい (したがって、すべてを小文字として保存することはできません)。

それで、私の質問は、varchar 配列に対して Postgres で大文字と小文字を区別しないインデックスを作成するにはどうすればよいですか? 考えられるアプローチの 1 つは、列に関数 GIN インデックスを作成することです。どうやってそれを行うのですか?他のアプローチはありますか?

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

sql - このクエリを最適化する方法

このクエリは非常に低速です。KeyTable の RID にクラスター化インデックス、RuleTable の RuleId にクラスター化インデックス、RuleTable の RuleId+SubjectId に一意の非クラスター化インデックスがあります。(RuleTableは他にもいろいろなところで使われています)

上記のクエリで、次のようなwhere句を導入すると

実行時間が > 50% 短縮されます。WHEREしかし、問題は、次の方法で句なしで元のテーブル結果を使用することです

このクエリを最適化する方法はありますか? インデックスまたは再帰の実行方法に関するあらゆる種類の提案が役立ちます

0 投票する
0 に答える
69 参照

mysql - 単純なクエリ パラメータを変更すると、MySQL クエリ プラン (説明) が大幅に変更されるのはなぜですか?

「explain」コマンドを使用して MySQL でクエリを調べると、奇妙な状況が発生します。列 "Period"、"X"、および "Y" に 3 つの一意でない単一列インデックスを持つテーブルがあります。これら 3 つの列はすべて、同じ整数データ型を持ちます。次に、次のコマンドを調べます。

1つ目は「インデックス条件を使用; whereを使用」と表示されていますが、2つ目は奇妙なことに「whereを使用」しか表示されていないため、パラメーターを1つ変更すると、クエリ実行でインデックスが削除されるようです。

テーブルには合計約 65000 行、Period 値ごとに約 5000 行あり (バランスがとれています)、最初のクエリは約 2000 行を返し、2 番目のクエリは約 500 行を返します。また、後者の期間値 (201304) は「最後の"物理的にテーブルにあり、前者の値も最初ではないため、期間の値がこの 2 つよりも小さい行と大きい行が多数あります。

元のテーブルは列が多く非常に複雑なので、ここに貼り付けることができません。しかし、インデックスはこの 3 つだけで、クエリはテスト中に使用したものと同じなので、あまり問題にならないことを願っています。

誰かがこれを引き起こす可能性のあるヒントと、私が知らないことを処理する必要があるかどうかを教えてもらえますか? ありがとうございました。