私は9000行以上の10のフィールドを持つMySQLデータベースを持っています。それはExcelファイルからインポートされたので、すべてが1つのテーブルにあります。どのようにデータベースプロセスを高速化できますか?
すでに選択範囲を絞り込んだクエリを実行すると、Codeigniterビューページに7000行戻ってきます。ブラウザは30秒間フリーズし、応答がないのでページを強制終了します。私が待っていれば、結果は結局現れます。これを改善する方法があるかどうか疑問に思っていましたか?
私は9000行以上の10のフィールドを持つMySQLデータベースを持っています。それはExcelファイルからインポートされたので、すべてが1つのテーブルにあります。どのようにデータベースプロセスを高速化できますか?
すでに選択範囲を絞り込んだクエリを実行すると、Codeigniterビューページに7000行戻ってきます。ブラウザは30秒間フリーズし、応答がないのでページを強制終了します。私が待っていれば、結果は結局現れます。これを改善する方法があるかどうか疑問に思っていましたか?
ある種のループ内でクエリを実行していますか?
ページ分割の回答に同意する場合は、制限とオフセットを使用してください。あなたが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}
));
}
改ページガイドをありがとう。 – FlyingCat
理想的には、より良いクエリを考え出すか、ユーザーにより優れた検索語句を提供することが理想的です。最終的に7000行すべてを調べる必要がある場合は、何らかの種類のページングが必要です。 1つのオプションは、this articleで説明されているAJAXページングです。基本的に、行のグループごとに新しいリクエストがありますが、ユーザーは同じページにとどまります。
リンクありがとうございます。非常に便利です。 – FlyingCat
sqlのselectで '制限'について読むことから、出力を改ページすることから始めます。
特定の列のインデックス(索引)を加えます。列がテキストの場合、FULLTEXT索引を追加します。
+1 "Over 9000"。要点:ページネーションを試みましたか? –
何らかのORMを使用している場合は、この数のレコードでは非常に遅くなります。大量のレコードをリストする必要があり、ページ付けをしたくない場合は、直接データベース呼び出しを使用します。 – halfer
Jerryは@Justinが指摘しているように、実際にこれらの結果をページングすることを検討する必要があると指摘しています。 HTMLの複雑さとJavaScriptの複雑さにもよりますが、どのブラウザにも1000をレンダリングするのは良い考えではなく、あなたが言及しているようにすることができます。 7000は間違いなく問題になるでしょう。正解者は7000行をスクロールします – spinon