ホームページ > バックエンド開発 > PHPチュートリアル > PHP ページに複数のクエリ ステートメントがあり、ページを開くのが非常に遅くなります。

PHP ページに複数のクエリ ステートメントがあり、ページを開くのが非常に遅くなります。

WBOY
リリース: 2016-06-13 12:16:49
オリジナル
992 人が閲覧しました

PHP ページに複数のクエリ ステートメントがあるため、ページを開くのが非常に遅くなります。どうすればよいですか?
以下のコードを簡単に説明します。まず、部門テーブルから部門レコードをクエリし、次に部門 ID に基づいてユーザー テーブル内の部門に対応するユーザーをクエリします。次に、ユーザー ID に基づいてログ テーブル内のユーザーに対応するログをクエリし、次にクエリを実行します。ログ ID に基づいた監査テーブルのリーダー。監査レコード...一度に 1 つのレイヤーを呼び出すようなものなので、ページを開くのに約 1 分かかります。

データテーブルのスキャン回数が多すぎることが原因と思われますが、解決方法がわかりません。

//クエリ部門
$sql_Depart="SELECT * FROM 部門 WHERE gid>0 AND gid<15 ORDER BY gid";
$query_Depart=$db- >query($sql_Depart);
while($d=$db->fetch_array($query_Depart)){
?>

&lt; table style = "width:100%"&gt;
?php
&lt; table&gt;
?&gt;&lt; /str>
/すべてのログをクエリ
$sql="SELECT c1.*,c2.* FROM log c1 LEFT JOIN log_time c2 ON (c1.time_id=c2.tid) WHERE c2. year='".$year."' AND c1.userid='". $u['uid']."' AND c2.end_date<'".date("Y-m-d")."' ORDER BY c2.tid desc";
$query=$db->query($sql );
while($row=$db->fetch_array($query)){

?>
🎜>
td>
['年']."年".$ row['月']."月".$row['週'] ."week(".date("Y/m/d", strtotime($row['start_date']))." - " .date("Y/m/d", strtotime($row['end_date') ])).")" ?>

--

引用:

引用: 引用:
データをリアルタイムで表示する必要がない場合は、キャッシュを使用できます。
例:
$data = getcache(); // キャッシュから読み取る
if($data==''){
// データベースを読み取り、データを取得します
$data = '読み取りデータベースを取得';
setcache($data); // 書き込みキャッシュ
}

echo $data;


これはファイルに書き込まれますか?
参考となる完全な例はありますか?ファイルには


が書き込まれます。

http://www.itstrike.cn/Question/PHP-technology-to-achieve-dynamic-cache-instance

-----ソリューションのアイデア----- ------------------

最上階で…でもそれは分かる私も昔そうしてたから…
裏面 多次元配列の使い方がわかれば、すべてが簡単になります...

N 個の複数ページで実行する別の方法もあります。
たとえば、担当部門にアクセスしてユーザーページに入り、ユーザーページをたどってください
もう一度ユーザーをクリックすると、ユーザー操作記録ページに入ります...

-----ソリューションアイデア------ ----------------

関連付け: 部門テーブルはユーザー テーブルに関連付けられ、ログ テーブルは監査テーブルに関連付けられます並べ替え: 最初に部門 ID、次にユーザー ID ごとに、その後... (次の関係がわかりませんでした) 条件: はい そのような方のために、
クエリ フィールドを統合してください: 部門 ID など、使用されているフィールドのみを取得します、部門名、ユーザー ID、ユーザー名、... (未使用のフィールドは絶対に取得されません)
クエリの数: これがない場合は、ページングなしのビッグ データ クエリを作成することをお勧めします。
このようにして、たった 1 つのステートメントでデータを取得できます
次に、データを走査します。データはソートされているため、混乱することを心配する必要はありません。
部門を横断します。部門 ID が異なる場合は、新しいテーブルが作成されます
。ユーザーが異なる場合は、新しいテーブルが作成されます
各ユーザー...

- - ----解決策のアイデア----------

次の SQL で高速化できるかどうかはわかりません(SQL が正しく実行可能であるという保証はありません)SELECT d.*,m.*,l.* FROM 部門 d
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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート