mysqlインデックスおよび最適化1


mysqlのインデックスはselectの性能を高める良い方法であり、異なるエンジンには異なるインデックス要求があり、例えば数量インデックス方式などが異なり、myisam innodbはbtreeインデックスであり、1つのテーブルに最大16個のインデックスを構築することができ、explainはインデックスの結果を表示するために使用され、explain select*from city where city='nan;インデックスcreate index_を作成name on table_name (column_name(num));
インデックス設計のいくつかの原則:インデックスを作成するのに最適なカラムはwhere句に表示されるカラムです.
ユニークなインデックスを使用すると、インデックスの基数が大きいほどインデックス効果が高くなり、生年月日と性別を格納する列のように、生年月日の列に構築することが望ましいということです.
短いインデックスを使用するには、文字列をインデックスするときに接頭辞の長さを指定することが望ましい.
ストレージエンジンタイプ:myisam mysqlデフォルトのストレージエンジンは物事も外部キーもサポートせず、アクセス速度が速く、MYIAMテーブルごとに3つのファイルが関連情報を格納している.frmストレージテーブル定義,.mydデータ構造myiはインデックスを格納し、データファイルとインデックスファイルは異なるディレクトリに置くことができ、平均的にIOを割り当てることができ、テーブルの破損は一般的にcheck tableで検査し、後にrepair tableで修復させ、myisamは3つの異なるストレージフォーマット、静的テーブル動的テーブル、圧縮テーブルをサポートし、デフォルトは静的テーブルであり、彼の利点はストレージ速度が速いことである.しかし、他の2つよりも大きなスペースを占めており、彼はデフォルトで空の位置を完全なスペースに補完し、読み取るときにスペースを除去すると、プログラムにスペースを格納することがある可能性があります.うっかりこのようなメカニズムによって除去される可能性があります.例えば、次のデータを格納するときに「abcd」、「fgeg」などです.長さがそれぞれ8、4であることをlengthで示すと、文字の後ろのスペースが除去され、前のスペースは除去されません.ダイナミックテーブルはテーブルの空間が可変ですが、頻繁な削除は過度なファイルの破片を招く可能性があります.これは定期的にoptimiz tableを最適化し、データの破損が回復しにくいことを示します.Innodbストレージエンジンは外部キー、物事のロールバックなどの操作をサポートしていますが、速度は少し遅く、次は外部キーです.
create table country(
country_id smallint unsigned not null auto_increment,
country varchar(50) not null,
last_update timestamp not null default current_timestamp  on update current_timestamp,
primary key (country_id))engine = Innodb default charset = utf8;
create table city (
city_id smallint unsigned not null auto_increment,
city    varchar(50) not null,
country_id smallint unsigned not null,
last_update timestamp not null default current_timestamp on update current_timestamp,
primary key (city_id),
key idx_fk_country_id (country_id),
constraint 'fk_city_country' foreign key (country_id) references country(country_id) on delete restrict on update cascade
)engine = Innodb default charset=utf8;

サブテーブル外部キー作成がon delete restrict on update cascade方式であれば、メインテーブル削除レコードの場合、サブテーブルに対応するレコードがあれば削除は許されず、メインテーブル更新時にワードテーブルに対応するものがあれば自動的に更新され、外部キー約束set foreign_を閉じることができるkey_checks=0
textとblobの違いは両方とも大きなデータを格納するために使用されます.違いはblobがバイナリを保存するために使用されることです.写真のように、パフォーマンスの問題を引き起こします.特に、ビッグデータ操作を実行するとデータベースに多くの空洞が残るので、定期的にテーブルを整理します.optimize talberepeat関数を用いて大量のデータを挿入するrepeat(「date」number)をテストすることは、テーブルにdateを挿入した回数numberである.
文字セットの選択と修正:漢字の処理が多く、速度が要求される場合は、gbkをutf 8の比較的大きいものにすることが望ましい.彼は漢字を保存するのに3バイトを使うが、gbkは2バイトである.逆に、英語ではgbkを使わないほうがいい.彼が保存しているのは2バイトで、空間を浪費しているからだ.修正:1表構造mysqldump-uroot-p--default-character-set=gbk-d databasename>createtabを導出.sal
2、createtabを手作業で修正する.sqlテーブルでは、テーブル構造定義の文字セットが新しい文字セットであり、3、レコードが更新されないことを確認し、すべてのレコードをエクスポートします.4,dataを開く.sqlファイルはset names latin 1=>set names gbkになります.
5、新しい文字セットでデータベースcreat database databasename default charset gbkを作成します.6、表実行ファイルを作成し、データをインポートします.
sqlセキュリティの問題:sql注入攻撃はPrepareStatement+Bind-variableを用いて実現されるのが前処理文であり、正規表現で処理される.
mysql最適化:同じ文にSHOW VARIABLESがあります.SHOW STATUSはMySQLの運行状況を調べるもので、上記のpmaで見た情報と基本的に似ています.
SHOW VARiABLESSHOW VARiABLESはMySQLの構成パラメータを表示し、SHOW VARiABLES LIKE‘Key%’を使用することもできます
SHOW PROSCESSLISTSHOW PROSCESSLISTは、現在進行中のプロセスを表示し、ロックテーブルなどの状況のチェックに役立ちます.一般的には、MySQLのスロークエリーレコードを開くも同様に調査に有利である.
SHOW OPEN TABLESSHOW OPEN TABLESは、現在開いているテーブルのリストを表示します.
mysqladmin status MySQLに付属のmysqladminツールを使用してstatusを表示し、以下のコマンドmysqladmin-uroot–password='password'statusで表示された結果は、Uptime:87117 Threads:1 Questions:5481626 Slow queries:16 Opens:2211 Flush tables:1 Opentables:512 Queries per second avg:62.923さらに-i 5パラメータを追加することができます.5秒ごとに自動的にリフレッシュさせます.mysqladmin -uroot –password=’password’ status -i 5
mysqladmin extended-status同様にmysqladmin-uroot–password='password'extended-statusを使用してMySQLの実行情報をより多く表示できます.この方法は、最初の表示情報と基本的です.
データエクスポートインポート:
設計構想:
例外解決:
テーブル破損
パスワードがありません
データデッドロック