MYSQL インデックス 遅いのを早くする

VB Tips And Sample(HOME)(VB.NET Sample インデックス)

MYSQL インデックス

MYSQLバージョン
Server version: 5.1.52-MySQL Community Server (GPL)で再検証 2013-12-21
Server version: 5.6.15 MySQL Community Server (GPL)でも再検証 2013-12-21
MYSQLは、インデックスの順番で速度は劇的に変わります。

前回MYSQL CSV データ 取り込み-OBDC-VBAで取り込んだデータを検索してみる。
とろい!
というのが最初の実感で、一週間悩みましたが(Accessよりも遅い?なんで?)
MYSQL特有のインデックスを理解すると、早い!に変わりました。そりゃ9倍近く違うのだから・・・・
MSの方式とは全く違いますね。
以下にポイントをまとめて起きます。

★データ例 郵便番号 約12万件
id,tiho,o_post,post,pref_kana,city_kana,town_kana,pref,city,town,town_d_post,11,12,d_post,14,15 
1,01101,060,0600000,ホッカイドウ サッポロシチュウオウク,イカニケイサイガナイバアイ,北海道,札幌市中央区,以下に掲載がない場合,0,0,0, 0, 0, 0 

★実行時間は「クエリ時間」+「全フィールド*100件テーブル表示」+「実行プラン表示」+「検索結果の全件数取得」
のものなので、phpmyadminではありません。
SQLチューニングには自分でチューニングツールを作ってやった方が良いみたいです。

★インデックス 順番が重要です
post pref  

select * from KEN_ALL
where pref='東京都'
order by post
実行時間:0.94186210632324


★インデックス 順番が重要です
pref post

select * from KEN_ALL
where pref='東京都'
order by post
実行時間:0.10767698287964

★結論
where で指定する条件フィールド(何れかが。未だ疑問が残るが・・・)がインデックス定義の最初に来ること。
でないとインデックスは使ってくれません。
order 句で使用するフィールドと複合クエリとすること。
データベースの検索にはorder 句は必須と言っていいでしょう。


MYSQL インデックス

下記がMYSQL5.6で、インデックス設定が間違えたもの。
早いですね
下記がMYSQL5.6で、きちんとインデックスを使用したもの。
遅いですね
インデックスの順番
参考になる本は
MySQLによるタフなサイトの作り方
MySQLによるタフなサイトの作り方 でした。
サクサクのシステムを作りたいものです。
それにしても変わったインデックス(知らないだけか?)だなと言うのが感想。
VB Tips And Sample(HOME)(VB.NET Sample インデックス)