1

ロギングのみに使用する MySQL データベースがあります。これは、いくつかの単純でよく似た MyISAM テーブルで構成されています。db にデータを書き込むだけの 1 つのローカル (つまり、同じマシン上にある) クライアントと、データを読み取るだけのリモート クライアントが常に存在します。

私が必要としているのは、ローカル クライアントから大量のデータをできるだけ早く挿入することです。

値リストの長さを増やして挿入の量を減らす、またはLOAD DATA .. INFILE他のいくつかを使用するなど、これを高速化するためにすでに多くのアプローチを試しました。

これで、文字列からターゲット データ型への値の解析の制限に達したように思えます (クエリまたはテキスト ファイルの解析時に行われるかどうかは問題ではありません)。

質問は次のとおりです。

MySQL は、ローカル クライアントに対してデータを直接操作する手段を提供していますか (つまり、SQL を使用しない)? ポインタを渡すだけでデータを挿入できるAPIがあるかもしれません。

もう一度。hd1 がアドバイスしたように、SQL コードを最適化したり、スクリプトで同じクエリを呼び出したりしたくありません。私が望むのは、データのバッファをデータベース エンジンに直接渡すことです。これは、SQL をまったく呼び出したくないことを意味します。出来ますか?

4

8 に答える 8

0

INSERT into foo (foocol1, foocol2) VALUES ('foocol1val1', 'foocol2val1'),('foocol1val2','foocol2val2')などでソートする必要があります。詳細情報とサンプル コードは、ここにあります。さらに問題がある場合は、コメントを残してください。

アップデート

SQL を使用したくない場合は、次のシェル スクリプトを試して、必要なだけ挿入を実行し、insertToDb.sh などのファイルに入れて、昼と夜を続けてください。

#!/bin/sh
mysql --user=me --password=foo dbname -h foo.example.com -e "insert into tablename (col1, col2) values ($1, $2);"

として呼び出しますsh insertToDb.sh col1value col2value。私がまだあなたの質問を誤解している場合は、別のコメントを残してください。

于 2013-05-28T07:33:25.700 に答える
0

INSERT前述のように、複数の値を持つものを使用することを検討してください。

INSERT INTO table_name (col1, col2) VALUES (1, 'A'), (2, 'B'), (3, 'C'), ( ... )

これにより、いくつかの小さなクエリではなく、1 つの大きなクエリでデータベースに接続するだけで済みます。毎回ドアを開けてソファのすべての分解された部分を行ったり来たりするよりも、一度ドアからソファ全体を取り込む方が簡単です。:)

それとは別に、LOCK TABLES table_name WRITE前後にINSERT走ることもできますUNLOCK TABLES。これにより、その間に他に何も挿入されないことが保証されます。

テーブルのロック

于 2013-05-28T07:45:57.863 に答える
-1

insert ステートメントを使用せずに、「Sqllite Studio」を使用して mysql にデータを挿入します。無料でオープンソースなので、ダウンロードして確認できます。

于 2013-05-28T10:15:24.013 に答える
-1

insert into または update クエリを使用せずに MS SQL にデータを挿入する最良の方法は、MS SQL インターフェイスにアクセスすることです。テーブル名を右クリックし、[上位 200 行を編集] を選択します。次に、セルごとに入力するだけで、データベースにデータを直接追加できます。選択またはその他の SQL コマンドの検索または使用を有効にするには、選択した 200 行のいずれかを右クリックします。ペインに移動し、SQL を選択すると、SQL コマンドを追加できます。見てみな。:D

于 2013-05-28T08:17:40.017 に答える