UI設計したり、ウェブシステムを開発したりします。 

SQL見るだけクエリ#007 全国12万件の郵便番号からの抽出スピード

記入日:2023-01-02 編集日:2023-01-02

SQL見るだけクエリ。今回は全国12万件の郵便番号データをテーブルに保存し、このテーブルから条件に合わせてデータを取得する際のスピード感を味わってみようと思います。

この記事を読むと(約5分)
10〜20万件程度のデータから、どのくらいのスピードで条件に合わせたレコードを抽出できるか体験できます。

このページは、全国12万件の郵便番号データのうち、住所が赤坂のレコードのみを抽出しております。結果はこのページ最下部に表記しております。

さていつもの様に、テーブルの情報を取得するSQLに関して、注目する部分は、以下の9~10行目のみです。

SELECT postal7, pref, city, address FROM postal_code WHERE address LIKE "赤坂" この部分で、データベース内にあるpostal_codeテーブルのうち、addressの欄に【赤坂】と記載されている郵便番号を取得しています。

全124,562中24件が適応しました。ちなみに赤坂を含む文字だとまだまだたくさんありますので、今回は、前後にその他の文字列を含むものは対象外にしています。

このページを更新するたびに、同様の取得が行われます。その際にHTMLが生成される時間も含まれるため、お使いの環境によって少し時間がかかるかもしれませんが、単純なデータベースの処理スピードとしては、0.0556秒ほどかかりました。

try {
    include_once '../model/class.php';

    // データベース接続
    $database = new Database();
    $db = $database->connect();

    // SQLを準備し、パラメータをバインドする
    $query = 'SELECT postal7, pref, city, address FROM postal_code 
    WHERE address LIKE "赤坂"';
    $stmt = $db->prepare($query);

    // 実行する
    $stmt->execute();

    // 結果を取得する
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    print_r($result);

    // データベースから切断する
    $database->disconnect();

} catch(PDOException $e) {
    echo $e->getMessage();
}

これを実行すると、二次元連想配列で、取得することができます。

            Array
(
    [0] => Array
        (
            [postal7] => 0300956
            [pref] => 青森県
            [city] => 青森市
            [address] => 赤坂
        )

    [1] => Array
        (
            [postal7] => 0360537
            [pref] => 青森県
            [city] => 黒石市
            [address] => 赤坂
        )

    [2] => Array
        (
            [postal7] => 0393116
            [pref] => 青森県
            [city] => 上北郡野辺地町
            [address] => 赤坂
        )

    [3] => Array
        (
            [postal7] => 0391561
            [pref] => 青森県
            [city] => 三戸郡五戸町
            [address] => 赤坂
        )

    [4] => Array
        (
            [postal7] => 9893211
            [pref] => 宮城県
            [city] => 仙台市青葉区
            [address] => 赤坂
        )

    [5] => Array
        (
            [postal7] => 9850055
            [pref] => 宮城県
            [city] => 塩竈市
            [address] => 赤坂
        )

    [6] => Array
        (
            [postal7] => 9880075
            [pref] => 宮城県
            [city] => 気仙沼市
            [address] => 赤坂
        )

    [7] => Array
        (
            [postal7] => 0130064
            [pref] => 秋田県
            [city] => 横手市
            [address] => 赤坂
        )

    [8] => Array
        (
            [postal7] => 9691633
            [pref] => 福島県
            [city] => 伊達郡桑折町
            [address] => 赤坂
        )

    [9] => Array
        (
            [postal7] => 9601465
            [pref] => 福島県
            [city] => 伊達郡川俣町
            [address] => 赤坂
        )

    [10] => Array
        (
            [postal7] => 9637753
            [pref] => 福島県
            [city] => 田村郡三春町
            [address] => 赤坂
        )

    [11] => Array
        (
            [postal7] => 3091616
            [pref] => 茨城県
            [city] => 笠間市
            [address] => 赤坂
        )

    [12] => Array
        (
            [postal7] => 3111241
            [pref] => 茨城県
            [city] => ひたちなか市
            [address] => 赤坂
        )

    [13] => Array
        (
            [postal7] => 3770417
            [pref] => 群馬県
            [city] => 吾妻郡中之条町
            [address] => 赤坂
        )

    [14] => Array
        (
            [postal7] => 2860017
            [pref] => 千葉県
            [city] => 成田市
            [address] => 赤坂
        )

    [15] => Array
        (
            [postal7] => 9391751
            [pref] => 富山県
            [city] => 南砺市
            [address] => 赤坂
        )

    [16] => Array
        (
            [postal7] => 3840011
            [pref] => 長野県
            [city] => 小諸市
            [address] => 赤坂
        )

    [17] => Array
        (
            [postal7] => 6780021
            [pref] => 兵庫県
            [city] => 相生市
            [address] => 赤坂
        )

    [18] => Array
        (
            [postal7] => 6893111
            [pref] => 鳥取県
            [city] => 西伯郡大山町
            [address] => 赤坂
        )

    [19] => Array
        (
            [postal7] => 8020032
            [pref] => 福岡県
            [city] => 北九州市小倉北区
            [address] => 赤坂
        )

    [20] => Array
        (
            [postal7] => 8100042
            [pref] => 福岡県
            [city] => 福岡市中央区
            [address] => 赤坂
        )

    [21] => Array
        (
            [postal7] => 8200106
            [pref] => 福岡県
            [city] => 飯塚市
            [address] => 赤坂
        )

    [22] => Array
        (
            [postal7] => 8380222
            [pref] => 福岡県
            [city] => 朝倉郡筑前町
            [address] => 赤坂
        )

    [23] => Array
        (
            [postal7] => 8440024
            [pref] => 佐賀県
            [city] => 西松浦郡有田町
            [address] => 赤坂
        )

)
			

124,562件の郵便番号データaddress欄に
赤坂と記載されているものを取得(24件)

postal7 pref city address
0300956
青森県
青森市
赤坂
0360537
青森県
黒石市
赤坂
0393116
青森県
上北郡野辺地町
赤坂
0391561
青森県
三戸郡五戸町
赤坂
9893211
宮城県
仙台市青葉区
赤坂
9850055
宮城県
塩竈市
赤坂
9880075
宮城県
気仙沼市
赤坂
0130064
秋田県
横手市
赤坂
9691633
福島県
伊達郡桑折町
赤坂
9601465
福島県
伊達郡川俣町
赤坂
9637753
福島県
田村郡三春町
赤坂
3091616
茨城県
笠間市
赤坂
3111241
茨城県
ひたちなか市
赤坂
3770417
群馬県
吾妻郡中之条町
赤坂
2860017
千葉県
成田市
赤坂
9391751
富山県
南砺市
赤坂
3840011
長野県
小諸市
赤坂
6780021
兵庫県
相生市
赤坂
6893111
鳥取県
西伯郡大山町
赤坂
8020032
福岡県
北九州市小倉北区
赤坂
8100042
福岡県
福岡市中央区
赤坂
8200106
福岡県
飯塚市
赤坂
8380222
福岡県
朝倉郡筑前町
赤坂
8440024
佐賀県
西松浦郡有田町
赤坂

青森県と福岡県に、赤坂という地名が多いんですね。共に4件ずつありました。

SQLの使いどころ

サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。

SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。

また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。

KK

機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。