[英]How to fix slow query performance using NOT EXISTS MySQL? CodeIgniter
我正在尝试优化/加快数据加载的性能,有没有办法解决这个问题?
我有3张桌子:
tbl_tt_college_studentpersonalinfo
- 此表显示学生的姓名,加入我的查询
tbl_tt_college_preenrollment
- 此表显示预注册学生的待定状态
tbl_tt_college_enlistment
- 此表将检查学生的现有记录。
这是我的查询: - 我遇到的问题是数据加载速度很慢,可能需要 30-50 秒。 有没有办法改进它或使它像一个连接查询?
public function get_enlists() { $this->db->join('tbl_tt_college_studentpersonalinfo','tbl_tt_college_preenrollment.studentID = tbl_tt_college_studentpersonalinfo.studentID'); $this->db->where('tbl_tt_college_preenrollment.departmentID', $this->input->post('course')); $this->db->where('tbl_tt_college_preenrollment.yearLevel', $this->input->post('yearLevel')); $this->db->where("NOT EXISTS (SELECT tbl_tt_college_enlistment.studentKeyID FROM tbl_tt_college_enlistment WHERE tbl_tt_college_enlistment.studentKeyID = tbl_tt_college_preenrollment.studentKeyID AND schoolYear = '". $this->session->userdata('currentAcademicYear'). '-'. ($this->session->userdata('currentAcademicYear') + 1). "' AND semester = '". $this->session->userdata('currentSemester'). "')"); $query = $this->db->get('tbl_tt_college_preenrollment'); return $query->result_array(); }
这是参考的原始查询:
NOT EXISTS ( SELECT studentKeyID FROM tbl_tt_college_enlistment WHERE tbl_tt_college_studentpersonalinfo.studentKeyID = tbl_tt_college_enlistment.studentKeyID AND schoolYear = '". $this->session->userdata('currentAcademicYear'). '-'. ($this->session->userdata('currentAcademicYear') + 1). "' AND semester = '". $this->session->userdata('currentSemester'). "' )
See if this composite index on tbl_tt_college_enlistment
helps:
INDEX(schoolYear, semester, studentKeyID)
If not adequate, please provide SHOW CREATE TABLE
and EXPLAIN SELECT ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.