1

こんにちは、いくつかの 8 つのテーブルを結合して大きなクエリを実行しています。その 1 つのクエリ自体を使用してすべての詳細を取得します。

ここで、すべてのテーブルを結合するのが良いのか、それとも別のクエリを実行して、メイン クエリの ID を使用してループ内の詳細を取得できるのかを知りたいですか? そして、ループ内でクエリを実行するのは良いですか?

以下は私が使用しているクエリです、

SELECT node.nid AS nid,
       node.uid,
   node.title AS node_title, 
   og.og_description AS og_og_description,
   node.created AS node_created,  
   og.og_selective AS og_og_selective, 
tn.tid, 
td.name as groupcategory,
(select count(ou.uid) from og_uid ou,users u where ou.uid=u.uid and u.status=1 and ou.is_active=1 and ou.nid=node.nid) as ucount,
f.filepath,
CONCAT(statusbook_users.first_name,' ',statusbook_users.last_name) AS users_name
FROM node node 
LEFT JOIN og og ON node.nid = og.nid 
INNER JOIN content_type_group ctg ON (node.nid = ctg.nid AND ctg.field_cn_group_type_value IS NULL)
LEFT JOIN files f ON (ctg.field_group_image_fid = f.fid)
INNER JOIN users users ON node.uid = users.uid
INNER JOIN statusbook_users statusbook_users ON users.uid= statusbook_users.uid
INNER JOIN og_uid og_uid ON og.nid=og_uid.nid 
INNER JOIN term_node tn ON node.nid=tn.nid 
INNER JOIN term_data td ON tn.tid=td.tid 
WHERE (node.status <> 0) AND (node.type IN ('group'))
AND og_uid.is_active=1 AND og_uid.uid=65

私のローカルシステムで上記のクエリを実行した時間は 12824.59 ミリ秒で、実稼働サーバーで同じクエリを実行すると 217.34 ミリ秒かかりました

上記のクエリを最適化する方法はまだありますか??

4

1 に答える 1

0

通常は、1 つの大きなクエリを作成し、DBMS オプティマイザに、クエリを完了するための最速の方法を見つけ出すという大変な作業を任せる方がよいでしょう。通常、これはあなたよりもはるかに優れています。

ただし、確実に知るには、バージョンとプロファイルの両方を試す必要があります。

于 2013-02-12T04:36:55.890 に答える