以下のコードは少し面倒なので、簡単に説明します。まず、部門テーブルから部門レコードをクエリし、次に部門 ID に基づいてユーザー テーブル内の部門に対応するユーザーをクエリします。次に、ユーザー ID に基づいてログ テーブル内のユーザーに対応するログをクエリし、次にクエリを実行します。ログ ID に基づいて監査テーブルのリーダーを表示します。監査レコード...おそらくこのような感じで、一度に 1 つのレイヤーを呼び出すため、ページを開くのに約 1 分かかります。
データテーブルのスキャンが多すぎることが原因だと思いますが、解決方法がわかりません。
//部門のクエリ
$sql_Depart="SELECT * FROM 部門 WHERE gid>0 AND gid ?>
例:
$data = getcache(); // ??Save?Get
if($data==''){
// ?Get db?Get?? Get';
setcache($data); // ?Input?Save
}
echo $data;
クエリする必要のないコンテンツを減らすようにしてください。プロンプトが必要ない場合は、[保存] を使用できます。
例:
if($data==''){
// ?Get db?Get?? Get';
}
echo $data; これはファイルに書き込まれますか?
参考となる完全な例はありますか?
SQL ステートメントを説明し、インデックスの使用法を確認してください
プロンプトが必要ない場合は、ストレージを使用できます。
}
echo $data; これはファイルに書き込まれますか?
参考となる完全な例はありますか?
はファイル内にあります。
http://www.itstrike.cn/Question/PHP-technology-to-achieve-dynamic-cache-instance
先生、データはファイルまたは memcache に保存できます。
ただし、ループ内でクエリを実行していますが、これ自体は行うべきではありません。 2 つのテーブル内のすべてのデータを一度にクエリしてリサイクルできます。これにより、現在の速度よりも高速になる可能性があります。
ネストされたループ クエリはひどいです
この方法では、たった 1 つのステートメントでデータを取得できます
次に、データを走査します。データはソートされているため、データをスキャンする必要はありません。混乱するのを心配する必要があります
1 つ目は、部門を横断することです。部門 ID が異なる場合は、新しいテーブルを作成します
各部門はユーザーを横断し、異なるユーザーに遭遇したときに新しいテーブルを作成します
次の SQL が高速になるかどうかはわかりません (SQL が正しく、実行可能であるという保証はありません)
SELECT d .*,m.*,l.* FROM 部門 d
left join members m m.flag left join (SELECT c1.*,c2.* FROM log c1 LEFT JOIN log_time c2 ON (c1.time_id=c2.tid) WHERE c2.year='" .$year."' AND c2.end_date<'".date("Y-m-d")."') l on l.userid = m.uid
WHERE d.gid>0 AND d.gid<15 ORDER BY d. gid,m.flag desc,l.tid desc
ステートメントとして書かれています~
desc SQL
キーフィールドにインデックスを作成する
次の SQL が高速化できるかどうかはわかりません (SQL が正しく実行可能であるという保証はありません)
SELECT d.*,m.*, l.* FROM 部門 d
m.flag<5 および m.groupid = d.gid でメンバー m を左結合
左結合 (SELECT c1.*,c2.* FROM log c1 LEFT JOIN log_time c2 ON (c1.time_id= c2.tid) WHERE c2.year='".$year."' AND c2.end_date<'".date("Y-m-d")."') l on l.userid = m.uid
WHERE d.gid> 0 AND d.gid< ;15 ORDER BY d.gid,m.flag desc,l.tid desc
関連付け: 部門テーブルはユーザー テーブルに関連付けられ、ログ テーブルは監査テーブルに関連付けられます
並べ替え: 最初に部門 ID、次にユーザー ID、そして... (以下は見ていません)関係を明確にします)
条件: これらはあなたのものであり、それらを統合します
クエリフィールド: 部門 ID、部門名、ユーザー ID、ユーザー名など、使用されているもののみを取得します (未使用のフィールドは決して取得されません)
クエリの数: これはありません。1 つ作成することをお勧めします。ページングなしの大きなデータ クエリはひどいです
このように、たった 1 つのステートメントでデータを取得できます
それから、データを走査することになります。ソートされているため、混乱を心配する必要はありません
最初に部門を横断し、部門 ID が異なる場合は新しいテーブルを作成します
各部門はユーザーを横断します。ユーザーが異なる場合は、新しいテーブルが作成されます。
各ユーザー...