IP範囲とそれに対応する国、地域(都道府県)、都市を持つ300万行のテーブルがありました。テーブルはMyISAMエンジンにありました。MySQL:MyISAMからInnoDBへの変換はクエリを高速化します...?
IPでユーザーの地理的な場所を取得するためのスクリプトを作成しました。一部のクエリでは最大17秒かかりました。その後、テーブルをInnoDBに変換してクエリ処理を再試行しました。これまでに時間のかかる問題が発生しているクエリの中には、パフォーマンスが大幅に改善され、0.02秒と短くなっています。クエリには2〜3秒かかっていましたが、約1000のIPアドレスでルックアップすることによって消費された時間は、以前のMyISAMエンジンで実行した時間の半分になりました。
私はMyISAMとInnoDBを比較してオンラインで検索しましたが、私が読んだすべての記事は、MyISAMがInnoDB on SELECTクエリより高速であると判断しました。しかし、私が見たことによると、これは私のテーブルの場合ではありません。誰にも何らかの理論がありますか?
P.S、MyテーブルにはFK制約がなく、PKはなく、IPを各行の 'ip_start'列と 'ip_end'列と比較することで検索します。 IPが範囲内にある場合、行は一致します。私のスクリプトでありますクエリの例を以下に示します。
SELECT country, region, city FROM ip_location WHERE ip_start<=1177798832 AND ip_end>=1177798832 LIMIT 1;
2つのエンジンのキャッシュ/キーサイズを比較しましたか? InnoDBはMyISAMよりはるかに高い制限を受けることができます。 –
@MarcBこれで、MySQLが高速アクセスのためにキャッシュに入れるデータのサイズについて話していますか? –
はい、mysqlの各エンジンは、他のエンジンとは独立した独自のキャッシュ/バッファ/制限を持ちます。 innodbは通常myisamよりわずかに遅いですが、もしinnoがバッファスペースを2倍にすると、減速を隠してより速く出てくるでしょう –