問題タブ [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 投票する
3 に答える
211 参照

database - データベース設計の質問-どちらが最善の解決策ですか?

私はFirebird2.1を使用しており、この問題を解決するための最良の方法を探しています。

予定表アプリケーションを書いています。さまざまなユーザーのカレンダーエントリが大きなカレンダーテーブルに保存されます。各カレンダーエントリには、リマインダーセットを設定できます。リマインダー/エントリは1つだけです。

統計的には、カレンダーテーブルは時間の経過とともに数十万のレコードに成長する可能性がありますが、リマインダーははるかに少なくなります。

定期的にリマインダーを照会する必要があります。

どちらが最良の選択肢ですか?

A)リマインダーの情報をカレンダーテーブルに保存します(この場合、IsReminder = 1について数十万のレコードをクエリします)

B)リマインダーが設定されているカレンダーエントリのIDのみを含む別のリマインダーテーブルを作成し、JOIN操作で2つのテーブルにクエリを実行します(またはそれらのビューを作成します)

C)リマインダーに関するすべての情報をリマインダーテーブルに保存してから、このテーブルのみをクエリできます。欠点は、リマインダーを表示するために、イベントの開始時刻を知ってリマインダーテーブルに保存する必要があるなど、一部の情報を両方のテーブルに複製する必要があることです。したがって、同じ値を持つ2つのテーブルを維持しています。

どう思いますか?

そしてもう1つの質問:Calendarテーブルには、UserIDフィールドのみで区切られた複数のユーザーのカレンダーが含まれます。ユーザーは4〜5人しかないため、このフィールドにインデックスを付けても、その選択性は非常に悪くなります。これは、数十万のレコードがあるテーブルには適していません。ここに回避策はありますか?

ありがとう!

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

php - MySQL への上書き/追加バッチ書き込みが混在する可能性はありますか?

私は、アップロードするマシンで CSV (所定の形式) を選択できるクライアント用のアップローダ (php を使用) をセットアップしています。CSV には 4000 ~ 5000 行が含まれる可能性があります。Php は、CSV の各行を読み取り、DB テーブルに直接挿入することで、ファイルを処理します。その部分は簡単です。

ただし、理想的には、このデータをデータベース テーブルに追加する前に、3 つの列 (A、B、および C) を確認し、それらの 3 つのフィールドの一致する組み合わせが既にテーブルにあるかどうかを確認します AND IFそのため、追加するのではなく、その行を更新したいと思います。これらの 3 つの列の一致する組み合わせがない場合は、先に進んで行を INSERT し、データをテーブルに追加します。

私の最初の考えは、列A、B、およびCをテーブルの一意のインデックスにしてから、すべての行を挿入し、「失敗した」INSERTを検出して(一意のインデックスの制限により)、更新を行うことができるということです。 . この方法は、テーブルに既に一致するコンボがあるかどうかを確認するためだけに、行ごとに個別の SELECT クエリを作成するよりも効率的であると思われます。

3 番目のアプローチは、MySQL の一意のインデックスを使用せずに単純に EVERYTHING を追加し、クライアントが後でそのテーブルをクエリするときに最新の一意の組み合わせのみを取得することです。ただし、そのテーブルに大量の無駄なデータが含まれないようにしています。

ベスト プラクティスや巧妙なアプローチについての考えはありますか?

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

mysql - MySQL が複合インデックスではなくインデックス交差を使用するのはなぜですか?

ときどき、MySQL の奇妙な動作に遭遇します。インデックス (type、rel、created)、(type)、(rel) があるとします。このようなクエリの最良の選択:

index を使用することになります(type, rel, created)。しかし、MySQL はインデックス(type)とを交差させることを決定し(rel)、パフォーマンスの低下につながります。次に例を示します。

同じクエリですが、ヒントが追加されています。

MySQL は、EXPLAIN コマンドの「行」列の数が少ない実行計画を採用していると思います。その観点からすると、4343 行のインデックスの交差は、8906 行の結合インデックスを使用するよりも優れているように見えます。では、問題はその数値内にあるのではないでしょうか?

このことから、MySQL は結合インデックスのおおよその行数を計算する際に間違っていると結論付けることができます。

では、MySQL が正しい実行計画を実行できるようにするには、どうすればよいでしょうか?

Django ORM に固執する必要があるため、オプティマイザーのヒントを使用できません。私が見つけた唯一の解決策は、これらの 1 フィールド インデックスを削除することです。

MySQL のバージョンは 5.1.49 です。

テーブル構造は次のとおりです。

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

mysql - MYSQL は WHERE ... IN クエリにインデックスを使用できますか?

現在、アプリには次のようなクエリがあります。

category_idに列を追加するcombosと、クエリは次のように変更されます。

現在、 に索引がありcombos(text)ます。取り外して装着を考えておりcombos(category_id, text)ます。MYSQL は古いインデックスと同じように新しいインデックスを使用できますか? 答えが「場合による」の場合、それは何に依存していますか? できない場合に備えて、古いものを保持する必要がありますか?

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

ruby-on-rails - Ruby on Rails 3.0 でカウンターキャッシュ列にインデックスを追加する必要がありますか?

環境: Rails 3.0.4、MySQL、Ruby 1.8.7

次の表があります。

n 人以上のユーザーがいる国を定期的に検索しています。カウンター キャッシュ 'users_count' にインデックスを追加することは理にかなっていますか?

追加されたユーザーごとにわずかなオーバーヘッドが追加されることはわかっていますが、カウンターキャッシュの仕組みに他に欠けているものがないことを確認したいと思います。

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

database - sqlite がコンテンツを保存する方法

私がグーグルで調べたところ、sqlite はクラスター化されたインデックスをサポートしていません( Four: Clustered Indexesを参照)。

これは、インデックスが順次 INTEGER である場合、レコードはその INTEGER の順序でデータベースに物理的に配置されることを意味します。1、2、3 の順です。

  1. シーケンシャル int インデックスを含むテーブルからいくつかのレコードが削除された場合、新しい挿入のレコードはどこに配置されますか? 私が知っていることから、レコードの int ID は大きくなるだけなので、レコードは末尾に追加されますよね? 削除された場所が無駄になるということですか?
  2. シーケンシャル INTEGER インデックスがない場合、sqlite テーブルはヒープ テーブルですか? つまり、空き領域が最初に見つかった場所にレコードが配置されます。
0 投票する
1 に答える
212 参照

mysql - PK なしで InnoDB テーブルを作成することはできますか? その場合、セカンダリ インデックスはクラスター化インデックスとして使用されますか?

主キーなしで InnoDB テーブルを作成することは可能ですか?

InnoDB テーブルは PK の周りにクラスター化されたインデックスとして構造化されているため、PK のないテーブルの構造はどのようなものになるでしょうか? そのテーブルはクラスター化されたインデックスのままですが、セカンダリ キーの周りにあるのでしょうか?

ありがとう。

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

database - 単一列/複数列インデックス、どちらが優れていますか?

いくつかのクエリを含むパフォーマンスの低い手順が 1 つあります。

一時テーブルをスキャンするいくつかの一時テーブル クエリを特定しました。テーブルのスキャンを避けるために、一時テーブルにインデックスを追加することにしました。where句で使用されている一時テーブルの列が複数あることに気付きました。ただし、最大のパフォーマンスを得るために、すべての列を単一のインデックス (複合インデックス) に含めるか、インデックスごとに 1 つの列を持つ複数のインデックスに含めるかはわかりません。

データベースは DB2

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

ruby - Rails-:id属性に必要なデータベースインデックス?

そのため、MichaelHartlによるRubyon Railsチュートリアルをフォローしているときに、usersテーブルに、行ごとに検索されないようにメソッド:emailの効率を向上させるために、属性に一意のインデックスを追加したことに気付きました。findこれまで、両方find_by_emailを使用find_by_idして、場合によっては検索してきました。:idただし、属性のインデックスを設定することはありません 。:idデフォルトでは一意でシーケンシャルな性質であるため、自動的にインデックスが作成されますか?または、そうではないので、検索用のインデックスを追加する必要があり:idますか?