私のデータベースには、activity、contact、user、deleted_contactというテーブルがあります。重いデータベースでMySQLの4テーブルから行を取得する
- アクティビティテーブルを5万行
- 接触テーブルを5万行
- を持っているユーザーの表は5000行
- を持ってdelete_contactテーブルは今、私の問題は、そのとき、私850000行
ですましたを取得しようとしています。によってすべてのテーブルに参加しています、mysqlはあまりにも多くの負荷をとると私のアプリtotall yは動作を停止します。
左接合を適用しています。上記の4つのテーブルから10行だけを取ることをお勧めします。
は、私は次のクエリを持っている: -
SELECT activity.id,
activity.ipaddress,
deleted_contact.name,
activity.city,
activity.country,
activity.state,
activity.user_agent,
activity.browser_name,
activity.os_platform,
activity.details AS details,
activity.file_name AS filename,
activity.created_at AS Date,
activity.model_id,
activity.user_id,
activity.contact_id,
activity.type,
activity.city,
activity.state,
activity.country,
contact.name AS Contact,
email.subject AS emailsubject,
email.opened,
email.schedule_date,
email.schedule_timezone,
FROM activity
LEFT JOIN contact ON activity.contact_id = contact.id
LEFT JOIN email ON activity.model_id = email.id
LEFT JOIN user ON activity.user_id = user.id
LEFT JOIN deleted_contact ON deleted_contact.contact_id = activity.contact_id
WHERE activity.user_id IN (2,
56,
78,
93,
105,
2004,
345,
450,
321,
456)
GROUP BY activity.id,
email.id
ORDER BY activity.id DESC LIMIT 0,
10
インデックスを配置しているようなクエリやテーブル構造に関する情報を追加してください。 – Sirko
どのくらい時間がかかりますか?mysqlでクエリを実行すると(アプリケーションではなく) –
私のアクティビティテーブルIユニークでないuser_id上のインデックスを持つ、model_idは一意ではない、contact_idはユニークでない、通知はユニークではなく、created_atは一意ではない。 –