以下のクエリを最適化するための助けを探しています。クエリを完了するのに約90秒かかってしまう現時点で2つのボトルネックと思われます。 5000製品しかないので、まさに大規模なデータベース/テーブルではありません。ボトルネックはSQL_CALC_FOUND_ROWSとORDER BYステートメントです - これらの両方を削除すると、クエリを実行するのに約1秒かかります。 SQL_CALC_FOUND_ROWSを削除してcount()ステートメントを実行しようとしましたが、それにも時間がかかります。MySQLクエリの最適化
INNER JOIN(これはあまり慣れていません)次のStackoverflowの投稿ごとに? Slow query when using ORDER BY
SELECT SQL_CALC_FOUND_ROWS *
FROM tbl_products
LEFT JOIN tbl_link_products_categories ON lpc_p_id = p_id
LEFT JOIN tbl_link_products_brands ON lpb_p_id = p_id
LEFT JOIN tbl_link_products_authors ON lpa_p_id = p_id
LEFT JOIN tbl_link_products_narrators ON lpn_p_id = p_id
LEFT JOIN tbl_linkfiles ON lf_id = p_id
AND (
lf_table = 'tbl_products'
OR lf_table IS NULL
)
LEFT JOIN tbl_files ON lf_file_id = file_id
AND (
file_nameid = 'p_main_image_'
OR file_nameid IS NULL
)
WHERE p_live = 'y'
ORDER BY p_title_clean ASC, p_title ASC
LIMIT 0 , 10
左ジョインになるには、これらのジョインがすべて必要ですか?内部結合と左結合の違いを理解していますか? – nnichols
いくつかのCREATE TABLEステートメントを表示できますか?どのようなインデックスがありますか? – Daan
商品は必ずしもカテゴリー、ブランド、著者、ナレーターを必要とせず、リンクファイルもありません。私の知る限り、LEFT JOINを使用する必要がありますか? INNER JOINSを使用した場合、一部の項目では何も一致しないためですか? –