MYSQLパフォーマンス最適化の共有(ダイバーシチ)

1205 ワード

MYSQL性能の最適化のライブラリの分表と停止しないでmysql表の構造を修正して、必要な友达は参考にすることができます
 
1、分庫表
明らかに、1つのプライマリ・テーブル(つまり重要なテーブル、例えばユーザー・テーブル)の無制限な成長はパフォーマンスに深刻な影響を及ぼすに違いありません.ライブラリとテーブルの分割は、パフォーマンスの最適化の方法です.現在の例では、1000万件以上の記録を持つユーザー・テーブルcompanyがあり、クエリーが非常に遅く、同僚のやり方は100のテーブルに分散しています.それぞれcompany 0からcompany 99まで、id配布に基づいてこれらの表に記録されています.牛迫のコードはたぶんそうです.
 
    
<?php 
for($i=0;$i< 100; $i++ ){ 
    echo "CREATE TABLE db2.company{$i} LIKE db1.company;
"; 
    #echo "INSERT INTO company{$i} SELECT * FROM company WHERE id%100={$i};
"; 



2、mysqlテーブル構造を無停止で修正する
同様にcompanyテーブルであり、前期に設計されたテーブル構造は合理的ではなく、データベースが絶えず実行されるにつれて、冗長データも大きく増加し、同僚は以下の方法を使用して処理した.
まずテンポラリ・テーブルを作成します.
/*テンポラリ・テーブルの作成*/
CREATE TABLE company_tmp LIKE company 
そしてcompany_を修正tmpのテーブル構造は新しい構造で、それから上のforサイクルを使ってデータを導出します.1000万のデータは一度に導出するのは間違っていますから、idはメインキーで、1区間1区間のガイドで、基本的には1回に5万本を導出します.ここで省略します
次に、名前を変更して新しいテーブルを置き換えます.
RENAME TABLE company TO company_bak,company_tmp TO company; 
このように、基本的にはロスがなく、ダウンタイムでテーブル構造を更新する必要はありませんが、実際にはRENAME期間テーブルはロックされているので、オンラインが少ない場合に操作するのがテクニックです.