SELECT SQL_CALC_FOUND_ROWS null as `rows` ,
(SELECT count(*) FROM `ci_user_smiley` where post_id = P.post_id) as smiley,
(SELECT count(*) FROM `ci_user_tag` where post_id = P.post_id) as tag,
(SELECT count(*) FROM `ci_comments` where post_id = P.post_id) as comment_count,
P.*, U.point_1 + U.point_2 + U.point_3 as `total`, F.*, Fi.*, U.*
FROM `ci_posts` P
LEFT JOIN `ci_users` U
ON P.`user_id` = U.`user_id`
LEFT JOIN `ci_filters` F
ON P.`filter` = F.filter_id
LEFT JOIN `ci_files` Fi
ON P.file = Fi.file_id
WHERE P.`approve` = 1 AND U.active = 1 AND P.post_type = 'post-color'
AND 1 ORDER BY P.post_date DESC LIMIT 0,20
このクエリは実行に5分かかりますが、どのように改善できますか?それはLEFT JOINまたはSELECTのためですか? テーブルの中には、10Kから100Kまでの行があることに注意してください。 何か提案がありがとうございます!左結合と選択を含む遅いmysqlクエリ
質問の書式設定方法を学ぶことをお勧めします。その後、結合列にインデックスを追加することをお勧めします。 –
'SQL_CALC_FOUND_ROWSは行としてNULLが無効です.'は奇妙です。 'rows'と呼ばれる結果セットにNULL列を与えます。' SQL_CALC_FOUND_ROWS'項目は、行ではなくクエリ全体の修飾語です。必要があるとわからない限り、省略することもできます。 –
@ tim-biegeleisenヒントのおかげで – sezarsaman