問題タブ [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 - SQLに正しいインデックスを使用させる
2つのインデックスを持つテーブルがあり、そのうちの1つは、特定のクエリのより高速なカバーインデックスです。ただし、mySQL(5.1)は正しいインデックスを選択していません。私はこのクエリの説明を見て、いくつかの速度テストを行いました。キーを強制すると大きな違いが生じます。
インデックスを選択する方法と、これに基づいている基準を調べる方法はありますか?
oracle - 日付計算を含む Oracle 最適化クエリ
データベース
クエリ
現在、このクエリの実行には約 2 秒かかっていますが、これは長すぎます。id 列にはインデックスがあり、Start_time+duration/24 には関数インデックスがあります。Sql Developer では、クエリ プランはインデックスが使用されていないことを示しています。このクエリは、テストの開始時間と終了時間に対して 475 行を返します。テーブル 2 には最大 80 万行あります テーブル 1 には最大 20 万行あります
期間/24 の計算がクエリから削除され、静的な値に置き換えられた場合、クエリ時間は半分に短縮されます。これはまったく同じデータを取得するわけではありませんが、除算にはコストがかかると思われます。
(starttime + duration/24) が設定された Table2 に endtime 列を追加することもテストしました。この列は、単一の更新によって事前設定されました。本番環境で使用する場合は、更新トリガーを介して設定します。
このクエリは約 600 ミリ秒で実行され、結合にはインデックスが使用されます。冗長データを含む列が追加されるため、理想的とは言えません。
このクエリを高速化する方法はありますか?
php - サーバーを停止せずにユーザーランキングを更新する最良の方法
ユーザー ランキングを中心とした Web サイトを運営していますが、ユーザー数が 50,000 人を超えており、5 分ごとにランクを更新するためにすべてのユーザーをループ処理するためにサーバーに負荷がかかっています。少なくとも 5 分ごとにランクを簡単に更新するために使用できるより良い方法はありますか? それはphpである必要はありません.perlスクリプトのように実行されるものか、そのようなものがより良い仕事をすることができるのであれば何かかもしれません(なぜそうなるのかはわかりませんが、私のオプションはここで開きます)。
これは、ランクを更新するために現在行っていることです。
更新(解決策):
これは、50,000 行すべてを実行して更新するのに 1/2 秒未満しかかからないソリューション コードです (Tom Haigh が提案するように主キーをランク付けします)。
.net - ADO.NET クエリの最適化
少し奇妙なことが起こっています。C# ADO.NET アプリケーションでプロファイラーを実行して取得した最初のクエリ。それが行っていることは、パラメーターが渡される方法ほど興味深いものではありません - このクエリは完了するまでに 250 秒以上かかりますが、パラメーターが渡される方法を変更して (クエリ 1) を変更すると (クエリ 2 を参照)、完了するまでに 0.001 秒未満かかります。
ここで何が起こっているのですか?ADO.NET に、より最適なクエリを強制的に生成させるためにできることはありますか?
mysql - 結合最適化を使用したMySQLクエリ
質問がありました:
SELECT a.nick,grp,count(*) FROM
help_mails
h JOIN accounts a ON h.helper=a.id WHERE closed=1 GROUP BY helper, grp, a.nick
この結合の何が問題になっていますか?2つのクエリを実行したとき:
SELECT helper,grp,count(*) FROM
100倍高速です。help_mails
h WHERE closed=1 GROUP BY helper, grp;
SELECT nick FROM accounts WHERE id IN (...)
EXPLAINはこれを返します:
account.id、help_mails.grp、help_mails.closedがインデックスを取得しました。
mysql - mysqlの緯度/経度の地理検索を最適化するためのヘルプが必要
約300kのレコードを含むmysql(5.0.22)myisamテーブルがあり、半径5マイル以内で緯度/経度の距離検索を実行したいと考えています。
lat / lonフィールドをカバーするインデックスがあり、lat / lonを選択するだけで高速(ミリ秒応答)になります。しかし、テーブルで追加のフィールドを選択すると、5〜8秒にひどく遅くなります。
全文検索を利用するためにmyisamを使用しています。他のインデックスはうまく機能します(たとえば、slug ='xxxxx'のリストから*を選択します)。
クエリ、テーブル、またはインデックスを最適化して処理を高速化するにはどうすればよいですか?
私のスキーマは次のとおりです。
私の質問は:
ジオサーチなしで計画を説明する:
ジオサーチで計画を説明する:
これがカバーリングインデックス付きの説明プランです。列を正しい順序にすることで、大きな違いが生まれました。
ありがとうございました!
sql - SQL クエリの最も遅いブロックを見つける最良の方法は何ですか?
ストアド プロシージャを実行するとリソースが大量に消費され、サーバーでタイムアウトが発生することがあります (特に CPU 使用率が 90% を超える場合)。
多くのリソースを消費するブロックを見つけるための最善かつ最速の方法と、それを解決するための良い方法を提案できる人はいますか?
- SQL Server 2005 を使用しています
sqlite - SQLiteの外部キーには自動的にインデックスがありますか?
SQLite が外部キーをネイティブに強制しないことは知っていますが、それは私の主な関心事ではありません。問題は次のとおりです。
sqlite は、少なくとも clientID が外部キーであるという情報を使用して、クエリを最適化し、invoice.clientID を自動的にインデックス化しますか、それともこの制約は実際にはノーオペレーションですか?