私は非常に大きなテーブルを持っており、ID ルックアップのような非常に単純なクエリを実行しています。テーブルの行が増えるため、時間の経過とともにクエリが遅くなりました。1 秒で約 300 のクエリを実行すると、スクリプトの実行が遅くなり、メモリが 99% になります (メモリは DB のサイズよりも小さい) パフォーマンスを最大化するために、テーブルをパーティション分割およびサブパーティション化したいと考えています。のような 30 のテーブル)、私はパーティショニングに非常に慣れていないため、コードを追加してください。選択クエリは、id ルックアップと単純な挿入の where 句のみです。RAMをDBサイズよりも大きくアップグレードしたいのですが、それを避けたいのですが、パーティション分割よりも問題を解決できるかどうかわかりません。
CREATE TABLE `books` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(200) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`picture` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`url` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`created` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `url` (`url`(333)),
INDEX `name` (`name`)
)
COLLATE='utf8_unicode_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=937
ここに私のクエリの例があります:
SELECT id FROM books WHERE url = 'blabla';
INSERT INTO user_books SET book_id = '3', user_id = '10';
各クエリには約 0.05 ~ 0.2 秒かかります
各テーブルに約500万から1000万行ありました。
DBサイズは10GB RAMを16GBにアップグレードすることを考えました