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

sql - Sqlite データベースの最適化

私は3つのテーブルを持つsqlite3データベースを持っています:

そして、辞書から単語を含むすべてのドキュメントを選択するSQLスクリプトがあります。

ディクショナリに ~= 400,000 レコード、ドキュメント ~= 1000 レコード、および document_index ~= 500,000 レコードが含まれている場合、クエリは iPad 2 で約 30 秒実行されます。

クエリを最適化する方法、またはデータベースの構造を変更する方法 (インデックスを追加するなど) を使用して、クエリ時間を短縮するにはどうすればよいですか?

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

sql - データベース レベルで MaxDOP を設定すると、その DB またはその DB で実行されるクエリの CPU が制限されますか?

16コアのCPUがあります。CPU は、単一データベースの SQL サーバーにのみ使用されます。現在、MaxDOP は 0 に設定されています。

クエリで使用される CPU の最大数を制限するために、MAXDOP を 8 に変更することを検討していましたが、コンサルタント DBA は、これによりデータベースで使用される CPU の数が制限されると述べています。

誰もこれについて経験がありますか?

ありがとう

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

mysql - レポート用のテーブルSELECTへのmysqlパフォーマンスINSERT

レポートのmysqlクエリに取り組んでいます。アイデアは、さまざまな場所から値がフェッチされる「reportTable」という単純なテーブルを作成することです。そうすれば、多くの結合などを覚えていなくても、reportTableをより簡単に使用でき、このテーブルを他のプロジェクトと共有することもできます。

  1. クエリの内側の挿入部分を分解して、一度にチャンクを実行する必要がありますか?おそらく数万行を追加しますか?

0 投票する
4 に答える
637 参照

mysql - SQL-サブクエリの呼び出しが多すぎます

以下のクエリは、「スキル名」のサブクエリの選択に関してはかなり遅いです。SQL実行に対してプロファイルを実行すると、skillnameのサブクエリに対してACDCallinformationテーブルから1行あたりのクエリが多すぎます。

このSQLクエリを最適化する最良の方法は何ですか?またはSQLクエリのコストをチェックしてスクリプトを最適化するのに役立つMySQLツールはありますか?

データを表示する最善の方法がわからない:

ACDCALLINFORMATION-現在3028行の数

SKILLINFO-平均行数は5〜10です

これは期待される出力です:

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

mysql - MySQL クエリの最適化: 投票計算を最適化する方法は?

うまくいっていることを願っています。

このデータベースについて少し助けが必要です:

ここに画像の説明を入力

これは、投票を格納するデータベースです。ユーザーは好きなオーディオ トラックを選び、投票します。彼らは「上」または「下」に投票できます。やさしい。しかし、計算統計に関しては、毛むくじゃらになります。

メタ

これは、最も一般的に使用される統計 (キャッシングのようなもの) を格納するキー値スタイルのテーブルです。

投票

投票テーブルは、投票自体を保持します。ここで唯一興味深いフィールドはType, の値で、次のことを意味します。

  1. 0- アプリは投票を行い、ユーザーはUIを使用してトラックに投票しました
  2. 1- インポートされた投票 (外部サービスから)
  3. 2- 統合投票。実際にはインポートされた投票と同じですが、実際には、このユーザーは外部サービスを使用してこのトラックに既に投票されており、現在はアプリを使用して自分自身を繰り返していることを示しています。

追跡

トラックは、それ自体の合計統計を保持します。好き、嫌いの量、外部サービスからの好き ( LikesRP)、外部サービスからの嫌い ( DislikesRP)、好き嫌いの調整。

アプリ

アプリは次の投票を取得する必要があります。

  1. 過去 7 日間で最も投票数が多かった 5 つのトラック
  2. 過去 7 日間で最も反対票が多かった 5 つのトラック
  3. 過去 7 日間で最も高く評価された 5 つのトラック。その投票は外部サービスからインポートされました ( Vote.Type = 1)
  4. 過去 1 か月間で最も投票数が多かった 100 曲

上位 100 位のトラックを取得するには、次のクエリを使用します。

このクエリは正常に機能しており、調整を受け入れています (クライアントはリスト内のトラック位置を調整したいと考えていました)。ほぼ同じクエリを使用して、賛成/反対の投票数が最も多い 5 つのトラックを取得します。タスク #3 のクエリは次のとおりです。

問題は、最初のクエリの実行に約 2 秒かかり、投票数が 4,000 未満であることです。年末までに、この数字は約 200,000 票になり、おそらくこのデータベースは機能しなくなります。というわけで、このパズルを解く方法を考えています。

そして今、私はこれらの質問に行き着きました:

  1. データベースの設計を間違えたのでしょうか? つまり、もっと良くなるでしょうか?
  2. クエリを間違えましたか?
  3. 他に改善できることはありますか?

最初に行ったのはキャッシングです。しかし、OK、これで問題は劇的に解決します。しかし、私は SQL 関連のソリューションに興味があります (常に完璧に傾倒しています)。

2 番目に思いついたのは、これらの計算値をMetaテーブルに入れ、投票手順中に変更することでした。しかし、私はそれを試すだけでは時間がありません。ちなみに、それだけの価値はありますか?または、エンタープライズ クラスのアプリはこれらの問題をどのように解決しますか?

ありがとう。

編集

インデックスを含めるのを忘れたなんて信じられません。どうぞ:

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

oracle - 大量に実行される Oracle SQL クエリの最適化に関するアドバイス/ヒント

以下の Oracle SQL クエリを見た直後に実行しないでください。:)

最適化に関するアドバイスを求めるために、完全なクエリを順番に並べました。オラクルの説明計画ツールを使用して、いくつかの最適化方法を特定しましたが、かなり行き詰まっています。このクエリの潜在的な最適化について、アドバイス/ヒント/グッド プラクティス/を教えていただけますか?

事実:

  • 表 PERSONNE および AFFAIRE には約 100 万行が含まれます
  • テーブル EVENEMENT には約 3000 万行が含まれています

前もって感謝します !

対応する説明計画は次のとおりです。

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

mysql - ネストされたGROUPBYの最適化

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

結果は(これは私が望む結果です):

サブクエリの結果は次のとおりです。

ここでサブクエリを回避する(そしておそらく最適化する)方法はありますか?データベース:MySQL

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

mysql - MySQL InnoDB が取る非効率的な実行計画

MySQL InnoDB オプティマイザーでリクエストを最適化するのに問題があります。次のクエリ (クエリ 1) は効率的に実行されます。

計画(計画1)は次のとおりです。

ここまでは順調ですね。

一方、以下のわずかに変更されたクエリ (クエリ 2) は壊滅的な実行計画を取ります。

結果は同じですが、プラン (プラン 2) は次のようになります。

不思議に思うなら、その新しいサブクエリは...

...クエリ 1 でハードコーディングされた 4 つの行を返すだけです。

したがって、クエリ (1) と (2) は同等です。

1 つではなく、クエリ 2 が必要だと思います。そして、クエリ 2 をクエリ 1 と同じくらい効率的にしたいのですが、次のことを試しました。

  1. クエリ 3: クエリ 2 に追加FORCE INDEX(RNID_FIELDID)します。MySQL は単純に無視します。

    説明 select * from ah_problems force index (rnid__fieldid) where rnid in (select rec.rnid as record_id from ar_records rec where rnid in (6022342, 6256614, 5842714, 6302489)) and fieldid in (5,6)

実行計画は計画 2 と同じです。

  1. クエリ 4: クエリ 3 に an を追加ORDER BY RNID, FIELDIDします。他のいくつかの質問で、これがオプティマイザをだます可能性があることがわかりました。役に立ちません。

    説明 select * from ah_problems force index (rnid__fieldid) where rnid in (select rec.rnid as record_id from ar_records rec where rnid in (6022342, 6256614, 5842714, 6302489)) と fieldid in (5, 6) 順 rnid, fieldid

プラン 4 は現在インデックスを使用していますが、行数は依然として壊滅的です。

これが役立つ場合、これが私のah_problemsテーブルの定義です。残念ながら、テーブルの定義を変更することはできません。MySQL オプティマイザーがプラン 1 を使用ah_problemsしてクエリ 2 のテーブルを攻撃するようにするためにできることはありますか?

0 投票する
4 に答える
7352 参照

mysql - @ Symbol - Mysql での再帰的 SELECT クエリのソリューション?

Mysql の Recursive SELECT クエリに関する質問はたくさんありますが、「Mysql には Recursive SELECT クエリの解決策はありません」という回答がほとんどです。

実際には特定の解決策があり、それを明確に知りたいので、この質問は、( how-to-do-the-recursive-select-query-in-mysql )で見つけることができる前の質問の続きです。

次のテーブルがあるとします。

& col1 の値「1」に接続するすべてのリンクを見つけたい、つまり印刷したい:

次に、この単純なクエリを使用できます。

ただし、テーブルに col1 に "1" を含む 2 つのレコードと、col1 に "3" を含む 2 つのレコードがある場合は、次のようになります。

次に、ユーザーが col1 で「1」を検索すると、2 つの「1」に接続しているすべてのリンクが表示されます。つまり、次の予想される結果が表示されます。

それで、私の質問は、上記の予想される結果のようにすべてのリンクを表示するように、上記のクエリをどのように変更するのですか?

編集: @ゴードン、しかし、省略した場合select distinct col1, col2 from、このクエリは何かを意味します。これに取り組むことができますか( childID が増加したため、 table1 を注文できます):

この場合、たとえばこれがデータである場合、順序は気にしません。

出力は次のようになります。

では、この結果は1,2,4,3正しいでしょうか?& col1 が にある場合は、すべてのレコードを選択します1,2,4,3。その後、最終的に期待される結果を得ることができます。

もしそうなら、私が今言った解決策を除外する特別なケースを考えてもらえますか?