如何加快数据库进程?

时间:2012-01-27 23:25:35

标签: mysql codeigniter

我有一个拥有超过9000行和10个字段的MySQL数据库。它是从Excel文件导入的,所以它都在一个表中。

当我运行已经缩小选择范围的查询时,我将7000行返回到我的Codeigniter视图页面。浏览器冻结30秒并要求我杀死该页面,因为没有响应。如果我等待,我会看到结果最终显示出来。我想知道是否有任何方法可以改善这一点?

4 个答案:

答案 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索引