このクエリを考えると:
EXPLAIN
SELECT mi.*, i1.sizes as tile_photo_sizes,
i1.filename as tile_photo_filename,
v.title_cached as venue_title,
v.subtitle_cached as venue_subtitle,
v.slug as venue_slug
FROM menuitems mi
INNER JOIN images i1 ON i1.id = mi.tile_photo_id
INNER JOIN menus m ON m.id = mi.menu_id
INNER JOIN venues v ON v.id = m.venue_id
WHERE NOT m.is_deleted AND v.slug="teplo" AND
m.is_published AND v.is_published
ORDER BY mi.number ASC
私は次の結果を取得しています:
join
、、で使用される列ごとに個別のインデックスを追加しようとしましたwhere
がorder by
、それでも一時ファイルを使用します。
私はそれを最適化したくありませんが、時々これはホスティングプロバイダーによってのみ修正できるエラーになります: Can't create/write to file '/mysql-temp/#sql_64e0_0.MYD' (Errcode: 17)
最大のテーブルはmenuitems(6,867)で、次に画像(944)、メニュー(85)、会場(79)が表示されます。
UPD:ORDERBYの削除は一時ファイルを使用しません