100万行の非常に単純なデータセットをMySQLテーブルにロードしようとしています..
LOAD DATA INFILE を使用して、5 ~ 6 個の異なるファイルからデータをロードします。これらのファイルにはすべて、同じ構造の同じデータが含まれており、異なる日について..
最初の 2 つのファイルをロードした後、ファイルがどれほど小さいかを考慮すると (各ファイルは 100k 行で約 100MB あります)、ロード プロセスが非常に遅くなり始めました... 100MB のファイルをロードするのに 10 分以上かかりました!.
問題はデータのロード方法とインデックス作成にあるのではないかと思いましたが、MySQL の全体的な問題であることに気付きました。たとえば、次のクエリを実行しました。
select count(*) from DataTable;
答えを返すのにMySQL 301秒かかりました!!! (答えは78万でした)
私は非常に根本的に間違ったことをしているに違いありません..innodbバッファプールなどの変数をチェックしましたが、何も異常に見えません...
私はかなり基本的な質問をしていることに気づきましたが、同様に基本的な問題について不平を言う投稿を見つけることができませんでした..
助けてくれてありがとう..
データ テーブルの作成に使用するコードを以下に示します。
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`addata`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`addata` (
`idAdData` INT NOT NULL,
`Field1` VARCHAR(30) NOT NULL,
`Field2` VARCHAR(30) NULL,
`Field3` VARCHAR(50) NULL,
`Field4` VARCHAR(50) NULL,
`Field5` VARCHAR(50) NULL,
`Field6` INT NULL,
`Field8` VARCHAR(50) NULL,
`Field9` VARCHAR(50) NULL,
`Field10` VARCHAR(50) NULL,
`Field11` INT NULL,
`Field12` VARCHAR(50) NULL,
`Field13` VARCHAR(50) NULL,
`Field14` VARCHAR(50) NULL,
`Field15` VARCHAR(30) NULL,
`Field16` VARCHAR(30) NULL,
`Field17` VARCHAR(30) NULL,
`Field18` VARCHAR(30) NULL,
`Field19` VARCHAR(30) NULL,
`Field20` VARCHAR(30) NULL,
`Field21` VARCHAR(30) NULL,
`Field22` VARCHAR(300) NULL,
`Field23` VARCHAR(100) NULL,
`Field24` INT NULL,
PRIMARY KEY (`idAdData`, `Field2`))
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;