私は、最大のテーブルが~3 mlnレコードを数えているMySqlデータベースを正規化して "クリーニング"しています。大きなテーブルで正規化クエリを起動するためにローカルMySqlを高速化します
いくつかのフィールドの名前を変更(非常に高速)し、その順序を(かなり速く)変更し、トリム、文字列のサニタイズ、一部の他のテーブルへの抽出、外部キーIDの保持...
私のローカルマシンでクエリを高速化できる方法はありますか?
私はMariaDB 10.1.21(XAMPP製)を搭載し、MacBook Air 8GB RAMで動作しています。
私は既にインデックスを多くのフィールドに配置していますが、カメとしてはまだ遅いです。
ご了承ください。ありがとう!
編集:リクエストしたとおり、私が行っているより多くの情報と最適化。
私は基本的に、3つのテーブルに分散された正規化されていない列を含む大きなテーブルを持っています。私が持っているもの
:私は
companies (id, name, street, id_city, id_subcategory, ...)
cities(id, name, ...)
categories(id, name)
subcategories(id, name, id_category)
は、だから私はきれいにし、次のように件のデータをexctract欲しいもの
companies (id, name, street, city_name, category_name, subcategory_name)
。
トリムと「汚い」分野からクリーンキャリッジリターン:適切なカテゴリを持っていない
update companies set mic_cat = TRIM(REPLACE(REPLACE(mic_cat, '\r', ''), '\n', ''));
削除企業。
delete from companies where mic_cat is null or mic_cat = '' or mac_cat is null or mac_cat = '';
新しいテーブルのフィールドと場所からデータを抽出します。
insert into categories (name) select distinct mac_cat from companies;
insert into subcategories (name, id_category) select distinct mic_cat,categories.id from companies JOIN categories ON mac_cat = categories.name;
はid_referenceを追加します。
ALTER TABLE companies ADD COLUMN id_subcategory int;
は、キーを取得...
UPDATE companies left join subcategories on companies.mic_cat = subcategories.name set id_subcategory = subcategories.id;
最後の1つは非常に遅かったので、私はl索引を作成して、companies.mic_catとsubcategories.nameに2つの索引を作成してください。これはかなり固定されています。
意味のある回答については、サンプル表のスキーマと、「トリム、文字列のサニタイズ、抽出」クエリの1つを表示する必要があります。 –
いくつかのテーブルで列を再編成するために、いくつかのALTER TABLE操作を実行しているようです。索引を追加するだけでは、表の再構成に役立つだけでなく、表の再構成のために*もっと*機能します。 –