2012-01-09 5 views
3

私はwpmudev.orgのプラグインを使用して、1つのデータベースと81,000以上のテーブルでwordpressサイトをマルチDBに分割する過程にあります。主な動機はパフォーマンスであり、私はテーブル自体をチェックし、MyISAMタイプです。エンジンのようなテーブルを作成する

テーブルを新しいデータベースに移動するときに、テーブルのタイプをInnoDBに変更してサイトのパフォーマンスが向上するはずだと考えていました。新しいDBへの既存のDBからテーブルを移行するスクリプトは、次の構文を使用しています

SELECT * FROM .... .... LIKE .... INSERT INTOをCREATE TABLEを... 。

私のようなCREATE TABLEコマンドでエンジンをoveerrideことができれば、私は情報を見つけることができませんでした:CREATE TABLEを

LIKE .... ENGINE = InnoDBは

また、私は疑問に思って「INSERT INTO .... SELECT * FROM ....」の場合、データを挿入する最も効率的な方法です...これはPHPスクリプトですので、パフォーマンスを向上させるための少しのコードを追加しても構いません。以前の試験では4コアの4GB RAMで3日かかっていました。

+0

81,000テーブル - タプルを意味しませんか? –

+0

いいえ、テーブル。それはWordpress MUのサイトです。それぞれが少なくとも3つのテーブルを必要とする8000以上のブログ....私はスキーマとタイムアウトを取得しようとするので、通常の管理ツールにも接続できません;-) –

答えて

2

はい、私はこれをやったことがあります(テーブルタイプをオーバーライドしました)。正常に動作します。

このような大きな転送の場合、私は通常、データをマッサージするスクリプト(例えば、エンジンタイプの変更)、新しいデータベースへの復元などのデータベースダンプを実行しました。テキストベースのデータベースダンプは、ほとんどINSERT INTOよりも速いCOPYを使用します。

ALTER TABLE {} ENGINE=INNODB;も発行できます。それは新鮮なスタートはそれのためにも多くを行っていると述べたが。

81,000テーブル。ワオ。

2

この質問も、私はMEMORYエンジンにテーブルのクローンを作成しようとしていたとして私を助けた別の質問で間接的に答えた:それは私を助けたとして、これは誰かに役立ちます how-to-copy-mysql-table-structure-to-table-in-memory

CREATE TABLE % ENGINE=InnoDB SELECT * FROM % 

願っています!

0

あなたはcreate table like...構文でエンジンparametrを指定することはできませんが、ここでいくつかの選択肢があります:

CREATE TABLE `another_table` ENGINE=MEMORY SELECT * FROM `original` 

...キーとtrigers

CREATE TABLE `another_table` ENGINE=MEMORY SELECT * FROM `original` WHERE 0 

せずに、テーブル構造とデータをコピーします。 ..

CREATE TEMPORARY TABLE `another_table`) ENGINE=MEMORY SELECT * FROM `original` 
だけで構造をコピーしますが、データは( WHERE 0ため、すべてをフィルタリングしません)

...多分、あなたが接続

CREATE TABLE `another_table` (INDEX(`id_column`)) ENGINE=MEMORY SELECT * FROM `original` 

を閉じるときにDBが自動的にテーブルを削除するだろう、TEMPORARY単語を追加したいと思います...これは新しいテーブルでキーを再作成する方法の例です(単純なCREATE TABLE構文と同じキー定義の構文)

関連する問題