ホームページ  >  記事  >  バックエンド開発  >  mysql SQL談話の最適化

mysql SQL談話の最適化

WBOY
WBOYオリジナル
2016-06-13 13:18:14718ブラウズ

MySQL SQL ステートメントは最適化されています
[code = sql] select tid, count (*) as count
from `pw_posts`
where fid = 77 group by tid
Order by Countrc Limit 10 [/code]
このうち、tid と fid はそれぞれインデックスを作成しています。テーブルには 160 万個のデータがあります。これを表示するには、次のようにします。
SIMPLE pw_posts ref fid fid 2 const 38112 where の使用; 一時ファイルの使用


------解決策------ --

ディスカッション

あなたの書き方は遅いです。サブクエリは 30,000 行を超えてチェックし、その後 30,000 行を超えてソートしません。これは 60,000 行以上実行されますか?引用:

結果セット
SELECT tid, COUNT(tid) AS count FROM (SELECT * FROM `pw_posts` WHERE fid =77) AS ret GROUP をグループ化してみることができます。 BY tid ORDER BY co……

------解決策---------
ステートメント自体には問題はありませんが、設計は改善できる可能性があります

最初にデータをキャッシュする必要があります
INSERT INTO `pw_posts_stat`(tid, fid, count)
SELECT tid, fid, count(*) as count
FROM ` pw_posts`
GROUP BY tid, fid

すると、すべてのクエリが非常に高速になります
SELECT tid, count FROM `pw_posts_stat` WHERE fid=77 ORDER BY count DESC LIMIT 10
SELECT tid, count FROM `pw_posts_stat` WHERE fid=77 ORDER BY count DESC LIMIT 11, 10

SELECT tid, count FROM `pw_posts_stat` WHERE fid=66 ORDER BY count DESC LIMIT 10
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。