0

MySQL テーブルがあります

`id` bigint(20) NOT NULL AUTO_INCREMENT,
`stn_num` int(11) NOT NULL,
`rec_time` datetime NOT NULL,
`pval` float NOT NULL,
`sig` float DEFAULT NULL,
`bval` float DEFAULT NULL,
`rmode` char(1) NOT NULL,
`rserver` char(2) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`data_flag` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 

mysql 5.6.12 がインストールされたばかりで、デフォルトの構成になっています。LOAD DATA を使用してテーブルにデータを挿入しようとしました。

LOAD DATA LOCAL INFILE 'dt1500.txt' IGNORE INTO TABLE my_data FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' (stn_num,rec_time,pval,sig,bval,rmode,data_flag)

1500 レコードを挿入するのに 55 秒かかりました。テーブルには 512000 レコードがあります。ライブデータベースにはもっと多くのレコードがあり、一意のキーと別のインデックスが必要であるという事実を考えると、時間がかかりすぎると思います。問題を単純化するために、これら2つを今のところ削除しました。MySQL のパフォーマンスを向上させる方法を教えてください。インストール後に MySQL の設定を変更していません

4

1 に答える 1

0
  1. インデックスを無効にしてみる

    -- before import
    ALTER TABLE `my_data` DISABLE KEYS;
    
    -- after import
    ALTER TABLE `my_data` ENABLE KEYS;
    
  2. 一部のオプションをオフにすることもできます。

    -- before import
    SET FOREIGN_KEY_CHECKS = 0;
    SET UNIQUE_CHECKS = 0;
    SET AUTOCOMMIT = 0;
    
    -- after import
    SET UNIQUE_CHECKS = 1;
    SET FOREIGN_KEY_CHECKS = 1;
    COMMIT;
    
  3. どのような種類のコンピュータを使用していますか? これは仮想マシンですか、Web サーバーですか、それともホーム コンピューターですか? 55 秒で 1500 レコードを処理するには非常に時間がかかります。インデックス、自動コミット、およびすべてのチェックを使用しても、より高速に実行されるはずです。ディスク ドライバが不良で、ディスクが DMA などではなく PIO モードで動作している可能性がありますか?

于 2013-09-17T16:52:17.823 に答える