我想问一个你们很多人已经问过自己的问题,我想。我正在创建一个 PHP 网站,一切运行顺利,直到我决定用一些测试数据填充我的数据库(真实数据,当应用程序开始真正使用时,它会变得更大)。大多数事情仍然可以正常工作,但是一个特定的(并且非常重要的)功能开始具有三到四秒的执行时间,其中大部分时间都花在了 MySQL 服务器上。
交易是这样的:我正在为一所学校构建一个应用程序,它需要包含每天、每个人、每个房间、每个班级的所有时间表和课程。完成了数据库的结构,创建了索引,等等……问题在于,由于所有这些数据都是关系型的(并且可以分布在许多表中),因此获取它们的查询可能如下所示:
SELECT field1, field2, etc
FROM schedules AS su
LEFT JOIN schedules_lessons AS sul
ON sul.ID_SCHEDULE = su.ID
LEFT JOIN schedules_lessons_teachers AS sult
ON sult.ID_LESSON = sul.ID
LEFT JOIN users AS u
ON u.ID = sult.ID_TEACHER
LEFT JOIN schedules_periods AS sup
ON sup.ID_SCHEDULE = su.ID
LEFT JOIN schedules_periods AS sulp
ON sulp.ID_SCHEDULE = sul.ID_SCHEDULE AND sulp.period = sul.period
LEFT JOIN schools AS s
ON s.ID = su.ID_SCHOOL
LEFT JOIN schools_buildings AS sb
ON sb.ID_SCHOOL = s.ID
LEFT JOIN schools_rooms AS sr
ON sr.ID = sul.ID_ROOM
LEFT JOIN schools_classes AS sc
ON sc.ID = sul.ID_CLASS
是的,有很多连接,我知道。我的问题是:我应该如何在连接数量和数量或查询之间取得最佳平衡?因为我觉得这真的可以改进,但我不知道如何实现它。
大多数表的记录数都在 200 以下,只有课程表可以有更多。最小值接近 5k,最大值可能是 30k 或更多。