問題タブ [database-performance]
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クエリ
私は「間違い探し」マルチプレイヤーゲームを構築しています。
ゲームの仕様は次のとおりです。
- 各ゲームには最大10人のプレーヤーが参加できます。
- ユーザーは同じ画像を2回見ないようにする必要があります。
(画像は4つの画像で構成されており、ユーザーはそれらの「違いを見つける」必要があります)。
私は何千枚、場合によっては何万枚もの写真から選ぶことができます。私が直面している問題は、ゲームプレーヤーの誰もまだ見たことがない画像を見つけるための、非常に非効率的でスケーラブルでない方法です。
私のデータベースにはusage table
、次のフィールドを持つがあります。
- picture_id
- ユーザーID
私の現在の解決策は次のとおりです:
ユーザーがゲームに参加し、アプリはそのユーザーの使用状況テーブルに表示されない画像をデータベースから選択し、入力したユーザーごとに同じ機能を実行して、同じゲームの他のユーザーがすでに見た画像の値を追加します。
数万枚の写真のデータベースがあり、以前のゲームで使用量テーブルがすでにいっぱいになっていると、機能に時間がかかりすぎてゲームの流れが損なわれるのではないかと心配しています。
この方法はあまりスケーラブルではなく、多くのゲームがプレイされていることを意味する一定のトラフィックのかなり安定した流れを期待しています。
このロジックを改善する方法や、データベース構造を改善するための提案はありますか?
mysql - 削除されたユーザーデータを保存する最良の方法は?
作業指示書/チケットを追跡および処理するアプリケーションに取り組んでいます。各チケットは、MySQL の変更をカスケードする外部キーを介して、チケットを作成/所有するユーザーにリンクされます。ユーザーが何らかの理由でアカウントを削除したとしても、チケットと基本情報を記録しておきたいと思うことは明らかです。
これを実現する最初の方法は、ユーザーがアクティブか非アクティブか、つまり削除されたかどうかを示す列をユーザー テーブルに作成することです。そうすれば、アカウントを閉鎖/削除すると、この値が反転するだけで、アプリにアクセスできなくなります。
私が持っていたもう1つのアイデアは、アカウントが削除されたときに、ユーザーレコードを削除されたユーザーテーブルに移動することでした. この方法では、users テーブルのパフォーマンスを最高の状態に保つことができます。これは、テーブルが大きくなると非常に大きな問題になる可能性がありますが、レコードを移動するための追加のクエリが追加されます。
明らかにこれの一部は好みかもしれませんが、私はパフォーマンスの側面に興味があります. 基本的に問題は、選択クエリと挿入クエリを比較する方法と、挿入クエリ (削除されたユーザー テーブルへのレコードの移動) をミックスに追加することにより、全体的なパフォーマンスがどの時点で向上するかということです。
sql-server - SQL Serverリモートクエリを実行するためのより良い方法は?
2つのSQLServerインスタンスがあり、あるサーバー上のデータベースに対して別のサーバーから多くのリモートクエリを実行しています。server1.database1でのこのクエリのように:
私はこのコードを他の誰かから継承しましたが、これを行うためのより良い(より速い)方法があるかどうか疑問に思っていましたか?つまり、server1.database1.dboにserver2.databse2.dbo.table2の正確なレプリカコピーを作成して、それ自体を更新し、リアルタイムで最新の状態に保つ方法はありますか?
Microsoft SQL Server Standard Edition(64ビット)バージョン10.0.4000.0
編集:実際、このシナリオで今行っていることは、可能であれば、オープンクエリとwith(nolock)を使用して、必要な最小のデータセットを取得し、それを一時テーブルに配置することです。また、「id」列を一意のクラスター化インデックスとして設定し、サーバー1で参加しているものにすばやく参加できるようにしました。
sql - SQL Server クエリに時間がかかる
ストアド プロシージャでいくつかの問題に直面しています。
積み上げ棒グラフ用に 1 つのストアド プロシージャがあり、1 か月のデータが表示されます。
以前のローカル サーバーでは 40 秒以上かかっていたので、いくつか変更を加えたところ、4 秒かかりました。ライブ サーバーで同じクエリを実行すると、40 秒以上かかります。
レコードの数は、ローカル サーバーと同じです。
ライブサーバーでより高速にするために何をすべきか誰か教えてもらえますか?
mysql - MySQLサブクエリのパフォーマンス5.0から5.1(およびそれ以降)
PHPアプリケーションの一部として次のクエリに遭遇しました。クエリはmysql5.0では高速(1秒未満)で実行されますが、mysql5.1以降では完了するまでに約7分かかります。
返される結果はわずか3行ですが、このクエリを実行している5.1サーバーでmysqldプロセスを実行すると、テーブルから数分間strace
データを継続的に読み取っていることがわかります(200バイトで7000行しかないテーブル)Event
行ごと)-おそらくそれを複数回再読み取りします。
だから問題は、私が遭遇しているここで何が違うのか、そしてこれが5.0で実行されるのと同じくらい速く5.1で実行されるように物事(クエリまたはより良いがいくつかのMySQL設定)を変更するにはどうすればよいですか?
参照データ
非難するクエリ
参照されるテーブルには、次の行数があります
セクション:60
イベント:7000
Event_Section:7000
Event_Website:15000
以下はEXPLAIN
、5.0(高速)および5.1(低速)サーバーからの上記のクエリの場合です。
スペースのためにクリップされています。うまくいけば、私は有用なものを何も切り出さなかった。
遅い(5.1)
速い(5.0)
php - facebook がどのようにしてインスタント自動提案のために適切な速度を維持しているか
Facebook には、検索、メッセージ送信などのさまざまな状況で、自動提案の結果を即座に表示する機能があります。
機能を「自動提案」と呼ぶのは正しかったと思います。
ユーザーに 1000 人の友達がいて、その友達にメッセージを送信したい場合、Facebook は数文字入力するだけでその人の名前を提案します。
私の質問は次のとおりです: 友人を見つけるために (またはそのような状況のために) データベースからデータを引き出して、それを処理している間、FB は自動提案の速度を維持するためにどの手法を使用しますか?
変数をキャッシュしていますか、それとも何ですか?SNSを作ろうと思っているので詳しく知りたいです。私のスクリプト言語はphpです
python - Pythonを使用してSQLiteデータベースにデータを繰り返し書き込む
GUI Python アプリケーションに SQLite を使用したいのですが、プログラムのパフォーマンスに影響を与えることなく、500 MS ごとにデータベースを更新する必要があります。
私はPyQt4を使っているので、QThreadを使おうと思ったのですが、扱いが難しそうなので、本当に理解する前に、それが最善の方法であるかどうか疑問に思いました。
私の質問は: QThread が最善の方法ですか、それとも他の方法がありますか?</p>
mysql - 1時間に数十万回実行する必要がある遅いmysqlクエリ
私のmysqlデータベースには、数十万行のテーブルがあります。各行には、(他のデータの中でも)ユーザー名とタイムスタンプがあります。
特定のユーザーの最新のタイムスタンプを持つレコードを取得する必要があります。
現在のブルートフォースクエリは次のとおりです。
user_name
テーブルには、オンとオンのインデックスがありdatetime_sent
ます。
このクエリを改善するにはどうすればよいですか?一度に何千ものこれらのクエリを実行する必要があります。各クエリには1〜4ミリ秒かかるようで、同じ結果を得るにははるかに効率的な方法があると思います。
c# - SQLite: .Net はネイティブよりもずっと遅い?
これが私のクエリです:
これにより、最も近い 20 点が返されます。
これをネイティブ sqlite で実行すると 78 ミリ秒以内に結果が返されますが、.Net sqlite 環境内からは 1400 ミリ秒近くかかります。
助言がありますか?
このクエリは、ORM 構造内にあり、パラメーター化された値を使用しています。ネイティブ テキスト クエリとしても試してみました。
クエリを実行するコード (ORM レイヤー内):
sql-server - SQLServerデータベースのパフォーマンスの向上
SQL Server2008R2をバックエンドデータベースとして使用するレポートソリューションを設計しています。データベーススキーマはかなり単純です。PKで名前が付けられた1つのテーブルと、で呼び出すための外部キーの関連付けをCalls
持つ名前が付けられた1つのテーブル。 CallId
Events
fk_CallId
各呼び出しには少なくとも6〜7のイベントがあり、dbには1日あたり3000以上の呼び出しが記録されています。
この関係がクエリのパフォーマンスにどの程度の影響を与えるかについて少し心配しています。inner join
数百万行()を超えるテーブルで使用Events
するとパフォーマンスが大幅に低下する場合は、結合を使用しないCallerId
フィールドをテーブルに追加できます(ただし、関連するテーブルに関する他の情報は失われます)。 Events
Calls
一般的に、パフォーマンスに問題がないことを確認するために他にできる手順はありますか?