問題タブ [query-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.
sql - DB2 Explainを使用するにはどうすればよいですか?
DB2のExplain関数を使用するにはどうすればよいですか?--実行するためと、クエリを最適化するために使用するための両方。DB2で利用できるより良いツールはありますか?
以前にクエリを作成したことがありますが、クエリの実行にかかる時間を知る必要がある唯一の方法は、クエリを実行して時間を計ることです。これはほとんど理想的ではありません。
編集:私にとっての答えは、「あなたはできません。あなたはアクセス権を持っておらず、アクセスすることもできません」であることが判明しました。あなたは官僚主義が好きではありませんか?
php - MySQL-最適化を手伝ってください。方法がわかりません。
次の問題のため、現在、テーブルの実行に非常に時間がかかるため、テーブルの最適化にご協力いただければ幸いです。
メインテーブル:
私はすべての*_idタイプ(UNSIGNED INT [5])を作成する傾向がありますか?UNSIGNEDが必要かどうかは少しわかりません
必要なサイズに応じて、すべてのテキストはVARCHAR(500..200)です。
たとえば、DATE型を使用します。生年月日、日付
'*'-他のテーブルの主キーである外部キーを指します
1ページは特に遅く、何が起こるかは次のとおりです。
このページには特定のゲームのプレーヤーのラインナップが表示されているので、私のクエリは次のとおりです。
すべてのplayer_id's、number、position FROMplayersテーブルを選択します。WHEREgame_idは、trysテーブルからの特定のゲームのID getTries(player_id、game_id)です。。ドロップゴールテーブルからのgetDropgoals(player_id、game_id)
プレーヤーテーブルからのgetPlayerName(player_id)
受信した詳細をテーブルに出力
誰かが目に見える落とし穴を指摘していただければ幸いです。
よろしく
// 編集
次のクエリを使用しましたが、trysテーブルで見つかった行のみを出力します。見つかったすべてのプレーヤーを出力しますが、彼が獲得した試行回数のみをカウントします。そのプレーヤーの試行がスコアリングされなかった場合は、プレーヤーの詳細を出力する必要がありますが、スコアリングされた試行の場合は0です。
クエリが正しいかどうかわかりません:SELECT ps.player_id、ps.position、ps.number、p.name、p.surname、COUNT(*)AS trysNo FROMplayers ps、player p、trys WHERE p.player_id = ps.player_id AND ps.game_id ='$ game_id' AND ps.team_id IS NULL AND trys.player_id = ps.player_id GROUP BY ps.player_id ORDER BY ps.number
トライを獲得しなかった場合にもプレーヤーを返すようにしたいのですが、今では、トライを獲得した場合にのみプレーヤーを返します。
誰か助けてもらえますか?
mysql - MySQLクエリの最適化を手伝ってくれる人はいますか?
クエリは次のとおりです。
profiles
2つのテーブルはとですrelations
。どちらも1,000,000行を超える、InnoDBエンジンを備えています。どちらもにインデックスがありtwitter_id
、 ( 、 )relations
に追加のインデックスがあります。クエリの実行には6秒以上かかりますが、これは本当にイライラします。どういうわけかこれに参加できることは知っていますが、MySQLの知識はそれほどクールではないので、あなたの助けを求めています。twitter_id
followed_by
よろしくお願いします=)
乾杯、K〜
更新しました
さて、私はなんとか2.5秒まで下がることができました。INNER JOINを使用して、3つのインデックスペアを追加しました。EXPLAINの結果は次のとおりです。
お役に立てれば。
別の更新
両方のテーブルのSHOWCREATETABLEステートメントは次のとおりです。
うわー、なんてめちゃくちゃ=)ごめんなさい!
database - Oracle Query Optimizer の診断出力
オラクルのコストベースのオプティマイザがクエリ実行計画に関して行う決定に満足できない場合が数多くあります。ヒント、単純ではないクエリ変換、インデックスの再編成、およびインスタンス パラメーターを使用して、より理にかなっていると思われることを行うように誘導しようとします。これは闇の中での攻撃であり、結果は開発サーバー、ステージング サーバー、および実稼働サーバーの間で大きく異なる可能性があります (統計などを同期しようとしても)。
Oracle サーバーから診断出力を取得して、CBO が検討した代替案と、それらが破棄された理由を示す方法はありますか?
EXPLAIN PLAN のような機能を考えていますが、可能なすべての (または少なくとも多くの) 実行計画とそれに関連するコストを列挙する点が異なります。
sqlite - sqlite クエリの最適化
クエリ
次のように最適化できます。
しかし、これはどのように行うことができますか:
これはどのように最適化できますか?
optimization - ソートにインデックスを使用するようにmysqlクエリを最適化する
3つの列に基づく複合インデックスがあります。そのうちの2つはクエリで制約され、3つ目は句による順序ですが、mysqlは並べ替えにインデックスを使用しません。
テーブルの構造は次のとおりです。
mysqlが結果をソートするためにインデックスを使用するように強制するにはどうすればよいですか?
php - MySQL - 他のテーブルの特定の ID に対応する ID をカウントするのに助けが必要です
という名前のテーブルがあり、players
次に、、、、という名前の他のテーブルがtries
あります。conversions
penalties
dropgoals
player_id
from を取得してからplayers
、以下をカウントする必要があります。
player_id
の試行回数tries
player_id
のコンバージョン数conversions
- のペナルティの
player_id
数penalties
player_id
のドロップゴール数dropgoals
各ゲームには約 15 人のプレーヤーがいるため、これはすべて一度に行う必要があります。このサイトはラグビーに関連しています。
私は次のことを試しましたが、うまくいきます:
SELECT players.player_id, players.number, CASE WHEN (COUNT(tries.player_id) = 0) THEN ' ' ELSE COUNT(tries.player_id) END AS nrTries FROM players LEFT JOIN tries ON players.player_id = tries.player_id WHERE players.team_id IS NULL GROUP BY players.player_id ORDER BY players.number
テーブルからすべてのプレーヤーを選択しplayers
、試行をカウントしますが、次のように変更するとすぐにエラーが発生します。
SELECT players.player_id, players.number, player.name, CASE WHEN (COUNT(tries.player_id) = 0) THEN ' ' ELSE COUNT(tries.player_id) END AS nrTries FROM players, player LEFT JOIN tries ON players.player_id = tries.player_id WHERE players.player_id = player.player_id AND players.team_id IS NULL GROUP BY players.player_id ORDER BY players.number
次のエラーが発生します。
Unknown column 'players.player_id' in 'on clause'
誰かがこれで私を助けてくれませんか、私は今何日も苦労していますか?
前もって感謝します
// 編集:
こんにちは、皆さん、私は今とてもばかげていると感じています。このコードは見事に機能しますが、プレーヤーが複数のタイプ、たとえばトライとコンバージョン、またはトライとペナルティで得点した場合、各タイプの数を誤ってカウントし、それらが作成されます。すべて同じです。
私のプレーヤーが 1 つのペナルティと 3 つのドロップゴールを獲得したとしましょう。それは 3 つのペナルティと 3 つのドロップゴールとして出力されます。何が問題なのかわかりません。
これが私のクエリです:
注意: $game_id は PHP 変数です。
また、 & と nbsp; の間にスペースを入れました。そうしないと、SO に出力されません。
誰かが私を正しい方向に向けることができますか?
mysql - この遅いクエリを改善する方法はありますか?
その特定のクエリは、スロー クエリ ログに常に表示されます。その効率を改善する方法はありますか?
私の主な関心事は、特定の映画に関連するジャンルのコンマ区切りリストを出力する group_concat 関数に関するものです。これを for ループに通し、クリック可能なリンクを作成します。
php - データベース コマンドは、phpMyAdmin ではすぐに、私の PHP スクリプトでは緩やかに実行されます
非常に大きな MySQL データベース (約 100 万項目) があり、そのデータベースに対してかなり複雑なクエリを実行しています。SQL コマンドを phpMyAdmin に入力すると約 2 秒かかりますが、PHP コードを使用して同じ出力を生成するには約 1 ~ 2 分かかります。
なぜこのような時差が生じるのでしょうか。クエリの実行が不十分だった場合、結果が phpMyAdmin に表示されるまでに時間がかかりませんか?
mysql - このタスクを 1 つの効率的な mysql クエリで実行するにはどうすればよいですか?
1 つのテーブルに保存されているテレビ番組のリストがあります。別のテーブルには、ショーのジャンル (アクション、ロマンス、コメディ) が格納されます。
通常、ほとんどの番組には複数のジャンルがあるため、tv_genre 列を 1 つにしてそこにジャンル ID を入れるという選択肢はありません。
テレビ番組 ID + ジャンル ID を格納するルックアップ テーブルを作成し、番組に関連付けられたジャンルごとに 1 行を挿入できます。
私にとって物事があいまいになるのは、インデックス上の番組のリストと、テレビ番組に関連付けられたジャンル名を出力したいときです。3 つのテーブルを 1 つの効率的なクエリに結び付けるにはどうすればよいでしょうか (インデックスの項目ごとに個別のクエリを実行してそのジャンルを取得するのではなく)。
この投稿の目的のために、表は次のとおりです。
ありがとう!