郵便番号データベースにindexを付けても検索が遅い理由MySQLで実験していて気づいた罠ですが、郵便番号データベースを自前で持っている場合に知っておくと良いTIPSです。ある時、郵便番号を検索するのにこういうクエリを発行していました。zip=1560051;結果はこれ。構造はこうなってます。この画像では見えませんが「zip」フィールドにindexを張っています。他のテーブルとの連携で複数データを参照なんかすると激重。全データを参照してる。他のテーブルと組み合わせるとindexも効かずに「type」列が「ALL」になっちゃってりしてる!データ型が文字列の場合は...よく見るとzipのデータ型がVARCHAR(7)になっていたことに気付きました。zip='1560051';このようにシングルクォーテーションで括ってあげるとindexの効果が発揮されます。学習のポイントMySQLを入門書などで学んで使っていると、ついついデータ型に見合わない一方向な検索クエリを作成してしまうことがある。「なにか動作が遅いな?」と感じたら放置せず、「EXPLAIN」句を利用してテストクエリーを発行し、ちゃんとindexが利用されているか、一時的なテーブルコピーなどでスロークエリーになっていないかどうかを確認しよう。コメントをキャンセルメールアドレスが公開されることはありません。Webサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。田舎に生まれ育ち東京へ。技術はDTPデザインからプログラミングまで、インフラはCD-ROM全盛からクラウドサーバーまで、いろいろなビジネスを作り、関わってきました(知見を生かして専門学校の講師も3年ほど)。今ではAWSで月間100万PVを超えるサービスを制作・運営しながらさらなるノウハウを蓄積中。このサイトではビジネスをITコンサルタント視点で考え、感じた知見や経験が世の中のお役に立てば、という視点で無料記事として公開しています。最近は機械学習による仕事の効率化を研究中。reserved.代表者のライフハックブログ。