1.先丢查询语句
-- 业务:查询某个学校[学校id为120082]的某一节课[大学英语]有多少学生选SELECT COUNT(DISTINCT _choosemate.studentId) 
FROM _choosemate LEFT JOIN _course ON _course.id = _choosemate.courseId 
  LEFT JOIN _student ON _choosemate.studentId = _student.id 
WHERE _course.schoolId = 120082  AND _course.`name` = '大学英语' 
  AND _course.beginYear = 2013 AND term = 1 AND LENGTH(_student.nickName) > 0
2.问题
单独执行时速度挺快的,但当并发量大时速度变得很慢,
被这个问题困扰很久了,急求大虾们指教!!!

解决方案 »

  1.   

    alter table _course add index(schoolId ,name)
      

  2.   

     _course 表时已经有2两个索引了,再加索引 不好吧
      

  3.   

    create index xx1 on _course(id,schoolId,`name`,beginYear)
    create index xx2 on _student(id,term,nickName)
    create index xx3 on _choosemate(courseId)
      

  4.   

    楼上各位给你的索引是优化的利器,除此之外有下面两个可以考虑优化的地方:
    1.使用LEFT JOIN没什么道理 换成INNER JOIN会优化一点
    2.如果不使用AND LENGTH(_student.nickName) > 0这个条件 就不需要连接_student表了 会优化很多 但是这要从业务逻辑上考虑
      

  5.   

    谢谢先,LEFT JOIN换成INNER JOIN 更慢了...