問題タブ [database-optimization]

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

sql - SQL query performance explanation

I have this query(of course with couple joins across tables and some views which I will call x for simplicity).

  1. Case 1 : select * from x -> returns in 10 sec, still acceptable, fairly heavy on joins and lot of data
  2. Case 2 : select * from x where userid = 1 -> returns in 0-1 sec, good enough
  3. Case 3 : using SP : if @userid = -1 select * from x else select from x where userid = @userid -> now calling sp with paramenter userid 1 should return on 0-1 sec as it should be comparable to case 2 but in fact it returns in 10 sec.

    Now, parameter masking OR WITH RECOMPILE on sp OR OPTION (recompile) on query with where clause doesn't help, What makes the SP run faster with userid = something is putting OPTION(recompile) on the first part of the SP ie on the query without where clause. :

  4. Case 4 : using SP : if @userid = -1 select * from x option (recompile) else select * from x where userid = @userid

Any explanation?

I can guess earlier it was using optimization based of query without where clause even for the query with where clause, but why is that?

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

mysql - mysqlデータベースから重複するインデックスを優先的に削除する

データベースのインデックスを最適化する手順を作成していますが、時間がかかります。それで、それが実行可能かどうかを確認したいですか?そして、他の方法でそれを取得したいのはまだ行われていません。

  1. すべてのテーブルからすべてのインデックスを読み取りたい。
  2. 主キーであるフィールドに他のすべてのインデックスを削除したい
  3. 上記を行った後。まだ一意としてインデックス付けされているフィールド。他のすべてのインデックスを削除したい
  4. プライマリでも一意でもないフィールド。それぞれに1つのインデックスのみを保持し、他のすべてのインデックスを削除したい

なぜMYSQLが主キーフィールドに一意のインデックスを許可するのか興味がありますか?それは何か有用な違いを生むことができますか?

質問:上記の4つのポイントで述べた階層を持つすべての役に立たないインデックスを削除するには、ガイダンス/クエリ/手順が必要です

更新1:SQLFiddleで作業を更新し続けます。現時点ではまだ始まったばかりです。ただし、このリンクでは、4つのフィールドと8つのインデックスがあることがわかります。そのうちの3つだけが必要で、他はすべて削除します。必要なのは1番目、3番目、4番目だけです。私の上記の4つのポイントによると。

アップデート2:eggayalから素晴らしい回答を得ました。彼が与えた最初のリンクは純粋なSQLソリューションです。Link2で試してみました。それは私に望ましくない出力を与えました。link2の出力は、ここでLink1を調べることで比較できます。

必要な出力は

Link2のクエリの出力の障害

auth_id_4Row1:auth_idは、同じフィールドの一意のキーとは何の関係もない(比較する)ため、冗長インデックスとして表示されません。ただし、同じ列に一意のインデックスがある場合はこのインデックスは必要ないため、必要です。

行2:一部の列に主キーインデックスが存在する場合、他のすべてのインデックスは冗長であると言いたい

3列目:大丈夫です

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

mysql - MySQL の挿入、更新頻度の高い、インデックスによる並べ替え

私は現在、events挿入 (および更新) が多い (1 分あたり 1,000 ~ 5,000 回の挿入を予測している) テーブルを持つデータベースを設計していますが、日付で並べ替える必要もあります。

各イベントにはreadブール フィールド があり、 (datetime)で並べuser_id替えられます。selectステートメントは次のようになりますupdated_atDESC

現在、readuser_id、および でインデックスを使用しupdated_atてフェッチとソートを最適化することを考えていますが、これはインデックス全体が で更新されることを意味しますか?

?

この状況で最もパフォーマンス効率の高い (挿入、更新、選択) ソリューションは何でしょうか?

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

mysql - 結合が多い MySQL クエリの最適化

私は現在、最新のスコアと評価をリストで追跡するサイトを運営しています。リストには頻繁に更新される何千ものエントリがあり、リストはこれらのスコアと評価の列で並べ替えることができます。

このデータを取得するための私の SQL は、現在 (おおまかに) 次のようになっています。

テーブルの場所 (簡略化):

約 300,000件のscore_adjustmentsエントリがあり、1 日あたり約 5,000 件のペースで増加しています。そのrating_adjustments約1/4です。

さて、私は DBA の専門家ではありませんが、常に呼び出しSUM()を行うのは良いことではないと推測しています。特に、数十万のレコードが含まれている場合はそうです。AVG()sara

私はすでにクエリのキャッシュを行っていますが、クエリ自体は高速でありながら、可能な限り最新の状態にしたいと考えています。このような大量の結合/集計クエリを最適化するソリューションを誰かが共有できるかどうか疑問に思っていましたか? 必要に応じて構造変更を行います。

編集1

クエリに関する詳細情報を追加しました。

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

database - 大きなデータ列を持つ単一のテーブルと複数のテーブルのどちらがより効率的ですか? (休止状態 - データベース)

私の Web アプリケーションは Grails で実装されています。

私の状況では、より多くの列を持つドメイン クラス (休止状態クラス) があり、そのうちのいくつかは最大 4000 文字の大きな文字列です。

例えば ​​:

ここで、この要素用に多言語データベースを実装する必要があります。私の戦略は、言語ごとに 1 つのフィールドを持つことです。

私の質問は、言語ごとに個別のテーブルを用意した方が効率的か、それとも 1 つの大きなテーブルに保存した方が効率的かということです。質問には 2 つの部分があります。第一に、データをロードするときに大きなメモリを使用する場合、休止状態にとってより効率的であり、第二に、データベースにとってより効率的であるのはどちらですか?

後で 10 以上の言語を持つことになるかもしれません。

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

image-processing - 記述子を記述子のデータベースに一致させる

データベースから記述子を照合するための高速な方法を見つけようとしています。私のプログラムは次のように機能します。

1)データベースに画像の記述子を入力します(適切な特徴検出アルゴリズムを使用)

2)画像を読み込む

3)そのイメージの記述子を抽出し、それをDB内のすべての記述子と比較して、適切な一致を見つけることができるようにします。

ご想像のとおり、32個の記述子の比較を何百万回も計算するのは非常に困難です。ハッシュ関数を使用しましたが、これはまったく同じ2つの記述子に対してのみ機能するため、2つのまったく同じ画像にのみ一致します。

この検索を高速化するために私が使用することを提案しますか?

乾杯

編集:

私は、ニューラルネットワークソリューションにアプローチすることから始めることにしました。これは、このテーマを始めたい人にとっては かなり良いリンクです。

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

php - この種のテーブルをmysqlで作成するには?

私のシステムには、2 人のユーザーがいます。

  • リクエスト送信者
  • ユーザーがリクエストを受け取る

データベース テーブルを作成したい 

100人のユーザーがいて、3つのリクエストのみを送信すると、次のようになります 

これは、3 つの要求に対してのみ 100 人のユーザーに対して 300 のレコードを挿入しますが、これは最適ではありません。

データベースを最適な方法で作成するための最適な方法は何ですか?

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

sql - SQL-計算値(子テーブルに基づく)を列に格納しますか、それともデータモデルで計算しますか?

私は少し困惑しました、そして私はSOコミュニティがこれで私を助けることができることを望んでいます。

私は現在、構成可能なルールに基づく注文割引のカスタムロジックを作成している状況にあります。最も単純な形式では、次の表があります。

注文

OrderDiscount

割引

Entity Frameworkを使用しています(ただし、この質問はどのデータモデルにも当てはまります)。私のオプションは単純なように感じますが、どちらにも欠点があります。

  1. SQLOrderテーブルに「Discount」列を追加します。欠点:注文が更新されるたびに、割引を再計算してこの列を更新することを忘れないでください。これにより、データの不整合が発生する可能性がありますが、パフォーマンスは向上します。割引額を上書きすることもできます。
  2. コード内の注文データモデルに「割引」プロパティを追加します。欠点:このプロパティにアクセスするたびに計算が必要ですが、常に正確です。

どのルートに行くべきですか、そしてその理由は何ですか?

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

sql-server-2008 - 巨大なログ ファイルを使用して SQL Server データベースを最適化する方法

サイズが1677,25 MBのSQLサーバーデータベースがあります。詳細なDBサイズ情報は次のとおりです。

DB サイズ:1677.25 MB
未割り当て領域:343.09 MB

予約済み: 24488 KB データ: 18560 KB インデックス サイズ: 2632 KB 未使用: 3296 KB 行数: 74410

ご覧のとおり、それほど大きな DB ではありません。問題は、ログです。

ログ ファイルのサイズ: 1.311 GB

古いログを消去するにはどうすればよいですか? 最後の 3 か月は重要かもしれませんが、1.3 GB は本当に重要なサイズです。

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

database - どちらが良いですか?データへのアクセスが高速な冗長性、または冗長性がなくデータアクセスが遅い冗長性

フォーラムのウェブサイトのデータベースを作成したい...

フォーラムWebサイトのすべてのユーザーは、次のフィールドを持つUSERSという名前のテーブルに格納されます。

次のフィールドを持つFORUMSという名前の単一のテーブルがあります。

また、作成されたフォーラムごとに(FORUMSテーブルの行ごとに)、「forum_ID」_repliesという名前の個別のテーブルがあり、そのフォーラムの正確なforum_IDが引用符で置き換えられます...
したがって、フォーラムには、その特定のフォーラムへのすべての返信が保存される別のテーブルがあります...

「forum_ID」_repliesテーブルのフィールドは次のとおりです。

私は自分のデザインを明確にしたことを願っています...今、私の疑問は

各「forum_ID」_repliesのフィールドの1つとしてuser_nameを保存しました。ただし、user_nameは、各 "forum_ID" _repliesテーブルに格納する代わりに、user_IDを使用してUSERSテーブルから参照(またはアクセス)できると思います。このようにして、冗長性が減少します。

ただし、user_nameが各テーブルに格納されている場合、user_nameの検索が減り、結果をより速く表示できます。

どちらがより最適ですか?

アクセスを高速化するために名前とIDを保存しますか、それとも重複を避けるためにIDのみを保存しますか?