我有一个拥有超过9000行和10个字段的MySQL数据库。它是从Excel文件导入的,所以它都在一个表中。
当我运行已经缩小选择范围的查询时,我将7000行返回到我的Codeigniter视图页面。浏览器冻结30秒并要求我杀死该页面,因为没有响应。如果我等待,我会看到结果最终显示出来。我想知道是否有任何方法可以改善这一点?
答案 0 :(得分:1)
理想情况下,提出更好的查询,或为您的用户提供更好的搜索字词。如果他们最终需要查看所有7000行,则需要某种分页。一个选项是AJAX分页,如this article中所述。基本上,您对每组行都有一个新请求,但用户仍然在同一页面上。
答案 1 :(得分:1)
从阅读sql select中的'limit'开始,为你的输出分页。
答案 2 :(得分:1)
您是在某种循环中运行查询吗?
同意分页答案,使用限制和抵消。如果你运行10个页面就有700个查询。我会使用codeigniter的分页库,如下所示。
$route['controller/(:num)'] = 'controller/index/$1';
-
public function index($offset=0)
{
//set a limit of 10 per result
$limit = 10;
//query the database
$q = "SELECT * FROM {table_name} LIMIT={limit} OFFSET={offset} ORDER BY {date} desc";
//count the results
$count = count({query results});
//setup pagination config
$config = array(
'base_url' => site_url('controller/'),
'total_rows' => $count,
'per_page' => $limit,
'uri_segment' => 2
);
//init the pagigination
$this->pagination->initialize($config);
//load the view and pagination data
$this->load->view('link_to_template', array(
'pagination' => $this->pagination->create_links(),
'results' => {query results}
));
}
答案 3 :(得分:1)
为特定列添加索引(索引);如果列是文本,则添加FULLTEXT索引