Php Mysql查询加载时间过长

Php Mysql查询加载时间过长,php,mysql,codeigniter,Php,Mysql,Codeigniter,我正在为我的项目使用Codeigniter,在我的数据库表中有一些文本数据类型的列。我意识到加载那些文本数据类型的列需要很长时间 我的测试结果: 这些是文本数据类型列—tc_状态_1、tc_状态_2、tc_状态_3、tc_状态_4、未确认状态、tc_拒绝状态、tc_恢复状态、tc_确认状态 这是我的CI代码,运行时间太长,甚至可能需要超过20分钟 $this->db->select('application_id, tbl_application.first_name, tbl_ap

我正在为我的项目使用Codeigniter,在我的数据库表中有一些文本数据类型的列。我意识到加载那些文本数据类型的列需要很长时间

我的测试结果: 这些是文本数据类型列—tc_状态_1、tc_状态_2、tc_状态_3、tc_状态_4、未确认状态、tc_拒绝状态、tc_恢复状态、tc_确认状态

这是我的CI代码,运行时间太长,甚至可能需要超过20分钟

$this->db->select('application_id, tbl_application.first_name, tbl_application.middle_name, tbl_application.last_name, tbl_application.gender, admission_no, tbl_application.phone, tc_sent, tc_sent_1, tc_status_0, tc_status_1, tc_status_2, tc_status_3, tc_status_4, tc_application_status, tc_admission_status, is_confirmed, confirmation_status, confirmation_code, unconfirmation_status, tc_rejected_status, tc_restore_status, tc_confirmation_status, tc_verification_status, tc_transfer_status, programme_name, tc_code, form4_index, registration_status');
        $this->db->from('tbl_application');
        $this->db->join('tbl_academic_info', 'tbl_academic_info.applicant_id=application_id AND tbl_academic_info.status="0"');
        $this->db->join('tbl_admission', 'tbl_admission.applicant_id=tbl_application.application_id AND tbl_admission.status="0"');
        $this->db->join($this->db_name.'.tbl_programme', 'tbl_programme.programme_code=tbl_admission.program_of_study AND tbl_programme.status="0"');
        $this->db->where('tbl_application.branch', $branch);
        $this->db->where('tbl_application.academic_year', $entry_year);
        $this->db->where('tbl_application.admission_status', '1');
        $this->db->where('tbl_application.status', '0');
这段代码运行得更快

        $this->db->select('application_id, tbl_application.first_name, tbl_application.middle_name, tbl_application.last_name, tbl_application.gender, admission_no, tbl_application.phone, tc_sent, tc_sent_1, tc_status_0, tc_application_status, tc_admission_status, is_confirmed, confirmation_status, confirmation_code, tc_verification_status, tc_transfer_status, programme_name, tc_code, form4_index, registration_status');
        $this->db->from('tbl_application');
        $this->db->join('tbl_academic_info', 'tbl_academic_info.applicant_id=application_id AND tbl_academic_info.status="0"');
        $this->db->join('tbl_admission', 'tbl_admission.applicant_id=tbl_application.application_id AND tbl_admission.status="0"');
        $this->db->join($this->db_name.'.tbl_programme', 'tbl_programme.programme_code=tbl_admission.program_of_study AND tbl_programme.status="0"');
        $this->db->where('tbl_application.branch', $branch);
        $this->db->where('tbl_application.academic_year', $entry_year);
        $this->db->where('tbl_application.admission_status', '1');
        $this->db->where('tbl_application.status', '0');
有什么推荐吗!我如何处理它,使我的代码可以运行得更快

使用索引 根据您的代码,您似乎正在填充一个项目列表,添加一个查看详细信息按钮/链接以获取应用程序的详细信息。只获取列表中非常必要的列。当用户使用新查询单击查看详细信息时,可以显示其他文本数据。新查询将仅获取1个应用程序的所有文本,而不是所有列表的文本 重新考虑数据库设计,对于所有我认为是叙述的状态,创建一个带有外键的新表到应用程序。 使用索引 根据您的代码,您似乎正在填充一个项目列表,添加一个查看详细信息按钮/链接以获取应用程序的详细信息。只获取列表中非常必要的列。当用户使用新查询单击查看详细信息时,可以显示其他文本数据。新查询将仅获取1个应用程序的所有文本,而不是所有列表的文本 重新考虑数据库设计,对于所有我认为是叙述的状态,创建一个带有外键的新表到应用程序。
这些文本列中到底存储了什么?它们似乎都有像X_status_X这样的名称,我希望它们的值很短,但你的问题似乎表明它们保存了大量的数据。另外,第二个运行到底快了多少?X_status_X可以保存很长的描述。第二个只需几秒钟就可以完成,不超过5到6秒。更糟的是,每当您发现自己使用上面的枚举列名(例如2)时,您都有理由相信您的模式设计是次优的。考虑是否可以将状态放置在单独的表中,例如StaseSeID、TcSID、StaseS,这些文本列中究竟存储了哪些内容?它们似乎都有像X_status_X这样的名称,我希望它们的值很短,但你的问题似乎表明它们保存了大量的数据。另外,第二个运行到底快了多少?X_status_X可以保存很长的描述。第二个只需几秒钟就可以完成,不超过5到6秒。更糟的是,每当您发现自己使用上面的枚举列名(例如2)时,您都有理由相信您的模式设计是次优的。考虑是否有可能将状态放置在单独的表中,例如StaseSeID、TcIID、StutuSI与Jawwad Ahmad一致。为了提高查询的性能,您必须考虑以下几点。1.只获取必要的列。2.索引列可以提高性能。3.尝试创建透视表以维护表之间的关系。4.如果要存储到数据库中的数据没有长值,则使用其他数据类型。我想建议您阅读更多关于MySQL数据类型和透视表概念的信息。@JerrySam如果这解决了您的问题,请将答案标记为已接受。谢谢:我同意贾瓦德·艾哈迈德的观点。为了提高查询的性能,您必须考虑以下几点。1.只获取必要的列。2.索引列可以提高性能。3.尝试创建透视表以维护表之间的关系。4.如果要存储到数据库中的数据没有长值,则使用其他数据类型。我想建议您阅读更多关于MySQL数据类型和透视表概念的信息。@JerrySam如果这解决了您的问题,请将答案标记为已接受。谢谢: