2012-01-27 10 views
1

私は9000行以上の10のフィールドを持つMySQLデータベースを持っています。それはExcelファイルからインポートされたので、すべてが1つのテーブルにあります。どのようにデータベースプロセスを高速化できますか?

すでに選択範囲を絞り込んだクエリを実行すると、Codeigniterビューページに7000行戻ってきます。ブラウザは30秒間フリーズし、応答がないのでページを強制終了します。私が待っていれば、結果は結局現れます。これを改善する方法があるかどうか疑問に思っていましたか?

+6

+1 "Over 9000"。要点:ページネーションを試みましたか? –

+0

何らかのORMを使用している場合は、この数のレコードでは非常に遅くなります。大量のレコードをリストする必要があり、ページ付けをしたくない場合は、直接データベース呼び出しを使用します。 – halfer

+1

Jerryは@Justinが指摘しているように、実際にこれらの結果をページングすることを検討する必要があると指摘しています。 HTMLの複雑さとJavaScriptの複雑さにもよりますが、どのブラウザにも1000をレンダリングするのは良い考えではなく、あなたが言及しているようにすることができます。 7000は間違いなく問題になるでしょう。正解者は7000行をスクロールします – spinon

答えて

1

ある種のループ内でクエリを実行していますか?

ページ分割の回答に同意する場合は、制限とオフセットを使用してください。あなたが10perページthats 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} 
    )); 

} 
+0

改ページガイドをありがとう。 – FlyingCat

1

理想的には、より良いクエリを考え出すか、ユーザーにより優れた検索語句を提供することが理想的です。最終的に7000行すべてを調べる必要がある場合は、何らかの種類のページングが必要です。 1つのオプションは、this articleで説明されているAJAXページングです。基本的に、行のグループごとに新しいリクエストがありますが、ユーザーは同じページにとどまります。

+0

リンクありがとうございます。非常に便利です。 – FlyingCat

1

sqlのselectで '制限'について読むことから、出力を改ページすることから始めます。

1

特定の列のインデックス(索引)を加えます。列がテキストの場合、FULLTEXT索引を追加します。

関連する問題