-1

全て-

したがって、5,600 万行のテーブルがあり、データの挿入とクエリには非常に長い時間がかかります。人々が持っているかもしれない推奨事項に興味があります。

私のサーバーには 32GB の RAM (ほとんど使用されていません)、2X RAID SSD、および E3-1270 が搭載されているため、非常に高速なはずです。

それでも、一部の選択クエリでは 40 秒以上かかります。私は基本的にゲーム世界のオブジェクトの位置を保存します。構造は次のとおりです。

CREATE TABLE IF NOT EXISTS `object_positions2` (
  `entry` mediumint(9) NOT NULL,
  `type` tinyint(4) NOT NULL,
  `x_int` int(11) NOT NULL,
  `y_int` int(11) NOT NULL,
  `z_int` int(11) NOT NULL,
  `x` float NOT NULL,
  `y` float NOT NULL,
  `z` float NOT NULL,
  `continent` smallint(6) NOT NULL,
  `zone` smallint(6) NOT NULL,
  `build` float NOT NULL,
  PRIMARY KEY (`entry`,`type`,`x_int`,`y_int`,`z_int`),
  KEY `entry` (`entry`,`type`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

エントリとタイプに基づいてクエリを実行し (そこにインデックスがあるのはそのためです)、挿入時に float x、y、z を int に丸めます (float 比較は既に存在する場合は挿入しないより効率的な方法として)高い)。

挿入やクエリを実行するのに時間がかかる理由について、誰か考えはありますか? MySQL はこれほど多くの行をサポートしていませんか?

挿入ステートメントの例を次に示します。

REPLACE INTO `object_positions2` (`entry` ,`type` , `x_int` , `y_int` , `z_int`, `x` ,`y` ,`z` ,`continent` ,`zone` ,`build`) VALUES ('$entry', '$type', '" . round($x) . "', '" . round($y) . "', '" . round($z) . "', '$x', '$y', '$z', '$continent', '$zone', '$ZeBuild');

前もって感謝します!〜ジョシュ

4

3 に答える 3