显然,对网站进行压力测试,一切都在崩溃。
今天的问题:几页上的WSOD。几个小时后,我将一页上的问题缩小到这个查询(我希望):它曾经在一秒钟内运行;现在它需要> 300。
SELECT jobs.posting_date ,
jobs.id ,
jobs.title ,
addresses.street ,
cities.name ,
states.abbr ,
details.target_url ,
details.description_extracted AS extraction,
COUNT(jobs_skills.skill_id) AS skills ,
users.first_name
FROM jobs
JOIN addresses
ON addresses.id = jobs.address_id
JOIN states
ON addresses.state_id = states.id
JOIN cities
ON addresses.city_id = cities.id
JOIN job_feed_details AS details
ON jobs.id = details.job_id
LEFT JOIN jobs_skills
ON jobs.id = jobs_skills.job_id
LEFT JOIN users
ON users.id = details.user_id
WHERE details.moderated = 0
AND expiration = 0
GROUP BY jobs.id
ORDER BY jobs.posting_date DESC
运行EXPLAIN
我得到这个:
id select_type table type possible keys key key_len ref rows extra
1 SIMPLE details ALL job_id 537704 Using where; Using temporary; Using filesort
1 SIMPLE jobs eq_ref PRIMARY,address_id_indexPRIMARY 4 557574_dev.details.job_id 1 Using where
1 SIMPLE addresses eq_ref PRIMARY PRIMARY 4 557574_dev.jobs.address_id 1 Using where
1 SIMPLE states eq_ref PRIMARY PRIMARY 1 557574_dev.addresses.state_id 1 Using where
1 SIMPLE cities eq_ref PRIMARY PRIMARY 4 557574_dev.addresses.city_id 1
1 SIMPLE jobs_skills ref Job_skill Job_skill 4 557574_dev.jobs.id 4 Using index
1 SIMPLE users eq_ref PRIMARY PRIMARY 3 557574_dev.details.user_id 1
看看EXPLAIN
有没有可能告诉
- 如果发生任何全表扫描
- 如果缺少任何相关的切口
- 哪个表或连接太慢了
- 我的“寻找慢表”中的任何其他有用信息
更新:在没有 group_by (和相关的表连接)的情况下再次运行查询;仍然需要一个临时表和文件排序,所以它似乎是一个索引问题。将开始查看缺失索引的所有表。