2

私はこのテーブルを持っています

CREATE TABLE IF NOT EXISTS `posts` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `thread_id` int(10) unsigned NOT NULL,
  `forum_id` tinyint(5) unsigned NOT NULL,
  `cat_id` tinyint(3) unsigned NOT NULL,
  `message` mediumtext collate utf8_unicode_ci NOT NULL,
  `userid` int(10) unsigned NOT NULL,
  `date` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `thread_id` (`thread_id`),
  KEY `userid` (`userid`),
  KEY `date` (`date`),
  KEY `forum_id` (`forum_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3273548 ;

パーティションを適用するにはどうすればよいですか?また、使用できる最適なタイプのパーティションは何ですか?

クエリは

SELECT id,user_id,message FROM posts WHERE thread_id = %

いくつかの結合で

PS: テーブルは 2.5 GiB です

  • MySQLパーティションについてあまり知りません:(

ありがとうございました

4

1 に答える 1

0

私の頭の上から(あなたのアプリケーションについてあまり知らなくても)私はあなたの最高のエンティティがその「フォーラム」であると仮定し、「フォーラム」ごとにシャーディングを行います。

シャーディングは簡単ではないことを覚えておいてください

編集 1

まず、2.5 GB のデータ サイズはそれほど大きくありません。それよりもはるかに大きなテーブルを処理します。

チップ:

  • インデックスを確認してください
  • MyISAM から InnoDB に移動します -> これにより、クエリが少し遅くなりますが、ブロックされません。
  • シャードが非正規化を試みる前に
于 2010-10-31T16:55:25.137 に答える