1

データベースにテーブルがあります:

ここに画像の説明を入力

また、MySQL を使用して情報を挿入/更新/作成していますが、クエリの実行にかかる時間は遅い例です:

最初に、ユーザーが私のアプリを実行すると、データベースからすべての IP を取得して、アプリを使用できることを確認します。

SELECT IP FROM user_info

次に、IP がデータベースにある場合は while ループを使用して、別のクエリを実行します。

"SELECT Valid FROM user_info WHERE IP='".$_SERVER['REMOTE_ADDR']."'""

Valid が 1 の場合は、それを使用できます。それ以外の場合は使用できませんが、IP がデータベースで見つからない場合は、使用して新しいエントリを作成します。

"INSERT INTO user_info (IP,First) VALUES ('".$_SERVER['REMOTE_ADDR']."','".date("Y/m/d") ."')")"

これで、この最初のスクリプトが終了し、別のスクリプトにアクセスします。これは毎分データベースを更新することになっていたのですが、今はそれを達成できないと思います。更新クエリは次のとおりです。

"UPDATE user_info SET Name='".$Name."', Status='".$Status."', Last='".$Last."', Address='".$Address."' WHERE IP='".$_SERVER['REMOTE_ADDR']."'")"

全体で平均2.2 秒かかり、テーブル atm には 1 行しかありません。

私の質問は、mysql クエリを高速化するにはどうすればよいですか? インデックスと、インデックスがパフォーマンスの向上にどのように役立つかについて読んだことがありますが、それらの使用方法を完全には理解していません。このトピックに関する光があれば役立ちます。

ナブケーキ

4

3 に答える 3

3

サイトが成長するにつれてインデックスは非常に重要になりますが、テーブルに行が 1 つしかない場合は役に立たず、クエリに時間がかかる理由にはなりません。データベースに何らかの根本的な問題があるようです。多分それは待ち時間の問題です。

SELECT * FROM users LIMIT 1またはのような単純なクエリから始めてみて、SELECT 1それでもパフォーマンスが低下するかどうかを確認してください。

于 2012-07-22T18:06:10.677 に答える
1

クエリの数が少ないほど、システムの待ち時間が短くなります。同じテーブルで行われているクエリをマージしてみてください。たとえば、2番目と3番目のクエリをマージして、実行することができます

INSERT INTO user_info ...... WHERE Valid=1 AND IP= ...

影響を受ける行数を確認して、新しい行が追加されたかどうかを確認してください。

また、その間のどの時点でもSQL接続を開いたり閉じたりしないでください。新しい接続を確立するためのオーバーヘッドは高くなる可能性があります。

于 2012-07-22T18:13:37.630 に答える
-1

IPプライマリキーとインデックスを作成できます

于 2012-07-22T18:07:40.193 に答える