【问题标题】:Query in codeigniter view very slow在codeigniter视图中查询非常慢
【发布时间】:2020-11-19 00:16:35
【问题描述】:

我在 codeigniter 视图中有这个查询,加载数据大约需要 10 分钟。如果我删除第二个选择,它会正常加载。

有人能看出造成这种情况的任何原因吗?

我可以在这里做些什么来缩短执行时间,从而增加我的页面负载?

我的代码如下:

   <tbody>
                    <?php 
//$this->db->select('teacher.*,teacher_attendance.*');

$this->db->select('teacher.teacher_id,teacher.name,teacher_attendance.*');                    

$this->db->from('teacher_attendance');
$this->db->where ('timestamp', $timestamp);
$this->db->group_by('teacher.teacher_id');
$this->db->join('teacher', 'teacher.teacher_id = teacher_attendance.teacher_id', 'left'); 
//$this->db->limit(50);
$teachers   =$this->db->get()->result_array();

                                   foreach($teachers as $row){

                               ?>
                        <tr>
                            <td><?php echo $row['teacher_id'];?></td>
                            <td><img src="<?php //echo $this->crud_model->get_image_url('teacher',$row['teacher_id']);?>" class="img-circle" width="30" /></td>
                            <td><?php echo $row['name'];?></td>

                            <td>

                           <select id="selected1" class="sele1 form-control selectboxit" name="status_<?php echo $row['attendance_id']; ?>">
                                    <option value="0" <?php if ($row['status'] == 0) echo 'selected'; ?>><?php echo get_phrase('undefined'); ?></option>
                                    <option value="1" <?php if ($row['status'] == 1) echo 'selected'; ?>><?php echo get_phrase('present'); ?></option>
                                    <option value="2" <?php if ($row['status'] == 2) echo 'selected'; ?>><?php echo get_phrase('absent'); ?></option>
                                </select>

                                 <!--    <input type="radio" name="status_<?php echo $row['attendance_id']; ?>" value="1"  <?php if ($row['status'] == 1) echo 'checked'; ?>/>
    &nbsp;
    <input type="radio" name="status_<?php echo $row['attendance_id']; ?>" value="2"  <?php if ($row['status'] == 2) echo 'checked'; ?> />
                          -->  
                            </td>
      <td>

      <select class="form-control selectboxit" name="leave_status<?php echo $row['attendance_id']; ?>">
                                    <option value="0" <?php if ($row['leave_status'] == 0) echo 'selected'; ?>><?php echo get_phrase('undefined'); ?></option>
                                    <option value="1" <?php if ($row['leave_status'] == 1) echo 'selected'; ?>><?php echo get_phrase('CASUAL'); ?></option>
                                    <option value="2" <?php if ($row['leave_status'] == 2) echo 'selected'; ?>><?php echo get_phrase('MEDICAL'); ?></option>
                                    <option value="3" <?php if ($row['leave_status'] == 3) echo 'selected'; ?>><?php echo get_phrase('DUTY'); ?></option>
                                    <option value="4" <?php if ($row['leave_status'] == 4) echo 'selected'; ?>><?php echo get_phrase('HALF DAY'); ?></option>
                                    <option value="5" <?php if ($row['leave_status'] == 5) echo 'selected'; ?>><?php echo get_phrase('OTHER'); ?></option>
                                    <option value="6" <?php if ($row['leave_status'] == 6) echo 'selected'; ?>><?php echo get_phrase('LATE'); ?></option>
                                    <option value="7" <?php if ($row['leave_status'] == 7) echo 'selected'; ?>><?php echo get_phrase('SHORT'); ?></option>

                                </select> 

【问题讨论】:

  • 为什么要在视图中编写查询?应该去控制器然后建模然后返回。
  • 你没有遵循 MVC 模式。
  • 当你说the second select你的意思是HTML &lt;select&gt;标签?可以分享get_phrase()的代码吗?
  • 是的,我的意思是
  • 首先,您应该在模型中编写查询,请牢记在心。要调试它,请添加以下代码并告诉我输出:$this-&gt;output-&gt;enable_profiler(TRUE);

标签: php mysql codeigniter


【解决方案1】:

从查询中删除 * 并仅放置所需的列。它将改善您的查询执行时间。并在您使用WHERE 子句的表列上添加索引,例如timestampteacher_id 等。

它将尽可能快地提高您的查询性能。

【讨论】:

    猜你喜欢
    • 2011-04-01
    • 1970-01-01
    • 2014-06-02
    • 2020-01-10
    • 1970-01-01
    • 2023-03-17
    • 2015-11-01
    • 2013-02-10
    • 1970-01-01
    相关资源
    最近更新 更多