ホームページ  >  記事  >  バックエンド開発  >  この mysql ステートメントを簡素化し、クエリ効率を最適化する方法を見つけるのを手伝ってください ~

この mysql ステートメントを簡素化し、クエリ効率を最適化する方法を見つけるのを手伝ってください ~

WBOY
WBOYオリジナル
2016-06-13 12:30:59789ブラウズ

この mysql ステートメントを簡素化し、クエリ効率を最適化する方法を教えてください~~~~~

この投稿は、2013-12-19 12:03:34 に setoy によって最終編集されました 次のような、管理者テーブル、部門テーブル、部門に対する管理者の評価テーブルの 3 つのテーブルがあります。


次に、各部門のスコアをクエリしてカウントする必要があります。部門にスコア レコードがない場合でも、クエリ統計の結果は次のように表示されます。


私は mysql ステートメントについて常に漠然としか理解していなかったので、次の段落をつなぎ合わせました:
select <br />
  '' as type, <br />
  `class`.`name` as cname, <br />
  `score`.`cid`, <br />
  `score`.`uid`, <br />
  `user`.`name` as uname,<br />
  `score`<br />
from `score`<br />
right join `class` on `score`.`cid` = `class`.`cid`<br />
left join `user` on `score`.`uid` = `user`.`uid`<br />
<br />
union all(<br />
  select <br />
    '汇总', <br />
    `c`.`cname`, <br />
    `c`.`cid`, <br />
    `c`.`uid`, <br />
    count(`cid`) as uname,<br />
    sum(`score`) as score<br />
  from (<br />
    select <br />
      '' as type, <br />
      `class`.`name` as cname, <br />
      `score`.`cid`, <br />
      `score`.`uid`, <br />
      `user`.`name` as uname,<br />
      `score`<br />
    from `score`<br />
    right join `class` on `score`.`cid` = `class`.`cid`<br />
    left join `user` on `score`.`uid` = `user`.`uid`<br />
  ) c group by `cname`<br />
)<br />
<br />
order by `cname` asc, `type` asc;


この SQL ステートメントは複雑すぎるようです。このステートメントは簡略化できますか?さらに、クエリ効率の観点から最適化することはできますか?
テーブル構造、データ、コードはすべてここにあります: http://sqlfiddle.com/#!2/6f5db6/10
助けて見てください
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。