2011-11-13 3 views
0

新しいテーブルを作成するために10,000,000以上の行を持つデータベーステーブルがあります。読書に最適なストレージエンジンは何ですか?10,000,000行のデータベースに最適なストレージエンジン

現在、私が使用します。

$sql = "UPDATE `packages_unsorted` SET `acv_return_viadetails` = '0';"; 

その後、レコードを選択する:

$sql = "SELECT * FROM `packages_unsorted` WHERE `acv_return_viadetails` = '0' LIMIT 1000;"; 

私は$ IDSと呼ばれる配列にid主キーを収集し、私はレコードを処理し、にデータを書き込みます各1000行の最後にインポート用のCSVファイル。 私は、その後でacv_return_viadetailsフィールドを更新:上記の表にのみ書き込みがあると私はすべてのフィールドごとの時間を選択すると

$sql = "UPDATE `packages_unsorted` SET `acv_return_viadetails` = '1' WHERE `id` IN ('".implode("','",$ids)."') LIMIT 1000;"; 

。メモリテーブルや他のタイプのストレージエンジンを使用して物事をより速くする必要がありますか?または、私は物事をスピードアップするために導入できる他の最適化はありますか?

また、このような操作のための合理的なmy.cnf構成は何でしょうか。あなたはacv_return_viadetailsフィールドにインデックスを事前に

感謝:)

+1

あなたのMySQLの設定を調整するには高度な技術を探しているなら、私は非常にお勧めします:あなたは、次の代わりに使用してacv_return_viadetailsような何かを試すことができ

3) /あなたができるすべての微調整を決定する。なぜInnoDbを使うだけで、 'acv_return_viadetails'に' INDEX'が付いているのかわかりません。たぶん、データセットについて少し分かっていれば、それを小さなテーブルに分割したり、データを再編成したりするのは理にかなっているかもしれません。 –

+0

ありがとう、私はInnodbを試してみますが、実際にはデータを分割することはできません。なぜなら、LOAD DATA INFILEを使って直接CSVをインポートするからです。約90フィールド* 10M行です。 –

+0

innodb - クラスタ化された主キーはこちらhttp://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 –

答えて

0

いくつかの提案を参照してください。)

1)

$sql = "SELECT `id` FROM `packages_unsorted` WHERE `acv_return_viadetails` = '0' LIMIT 1000;"; 

2で

$sql = "SELECT * FROM `packages_unsorted` WHERE `acv_return_viadetails` = '0' LIMIT 1000;"; 

を交換し、一度にすべてのidsをロードすることが可能であるかどうかをチェック1000の制限なし。 10Mのレコードでは、idsをすべてロードするのにわずか数百MBしかかかりません。

$sql = "SELECT `id` FROM `packages_unsorted`"; 

制限値を大きくすることを検討してください。 http://www.mysqlperformanceblog.com

$sql = "SELECT `id` FROM `packages_unsorted` LIMIT 0, 1000;"; 
$sql = "SELECT `id` FROM `packages_unsorted` LIMIT 1000, 1000;"; 
$sql = "SELECT `id` FROM `packages_unsorted` LIMIT 2000, 1000;"; 
+0

ありがとう、私は理解していますが、私は毎回*を選択する必要があるので、テーブルのすべてのフィールドを処理する必要があります。私はまた、(1000で)チャンクする必要がありますので、私はすべてのIDを取得することはできませんので、他のテーブルのクエリのmysqlサーバーを解放します:( –

+0

たぶんあなたは 'id'を選択し、それらを1つずつ処理してください。すべてのIDを取得するには、あまりにも多くのリソースを取るべきではないと思います。 – nikhil500

1

を持っていますか?

インポートを高速化しようと思っているなら、私はちょうどC++で300MBのファイルを65sでmysqlにインポートするプログラムを作った。おそらくあなたはそれをあなたのために適応させることができます。

https://github.com/homer6/import-geoip-data

+0

+1を見てください。 < and >はC++で何を意味するのですか?std :: auto_ptr temp_connection? – Bytemain

+0

それはテンプレートです。これにより、さまざまな種類のクラスを作成できます。たとえばベクトルは、intのベクトル(コレクション)を作成します。ベクトルは文字列のベクトルを作成します。あなたが言及した場合、それはsql :: Connectionへのauto_ptrを作成します。 – Homer6

+0

はい私は 'acv_return_viadetails'にインデックスを持っていますが、私はC++アプリケーションを使うことができないので、サーバ上でPHPにアクセスできます。私は他のものにも使用します:) –

関連する問題