0

過去に多くの定期的なデータベース クエリを実行してきましたが、現在は約 150 万エントリのデータベースがあり、ライブ更新をすばやく検索できる必要があります。

私のデータベースは、経度、緯度、市区町村を含むすべての米国の郵便番号とカナダの郵便番号です... 1 つの郵便番号または郵便番号を数分の 1 秒で取得し、(ajax を使用して) Web に送り返すことができる必要があります。ページ。したがって、ユーザーが郵便番号/郵便番号を入力すると、国、都市、および都道府県が自動的に入力されます。

現在、次のクエリを使用しています。

$sql = "SELECT  city, province, country 
  FROM postalcode
  WHERE PostalCode='$zip'";

今までインデックスを使用したことがありません。同じ結果を得るには、クエリを作成してクエリを置き換えるにはどうすればよいですか?

(余分なポイントのために!: インデックスは mysqldump でバックアップされますか?)

ありがとう!

4

5 に答える 5

2

クエリを置き換えません。インデックスは、クエリを取得するためにオプティマイザーによって使用されます。インデックスはサーバー上にあり、 の一部ではありませんmysqldump。ただし、テーブルの DDL には含まれます。

MySQL テーブルにインデックスを追加するにはどうすればよいですか? を参照してください。. これは、インデックスを配置する列がわかっいることを前提としています (ヒント: PostalCode)

于 2013-03-14T01:00:16.103 に答える
0

ajaxリクエストを2つに分割するのは良い考えだと思います。

最初のajaxリクエストは、テーブルから利用可能なzip / postal-codeのみをプルします(新しいもの、zip / postal-codeのみ)。

2番目のajaxリクエストは、郵便番号が完全に入力されたとき(または、ユーザーが新しい番号を追加しなかったとき)に発生し、都市と国を返します。

単一の列、数値のみのテーブルのサイズを縮小すると、最初のajaxリクエストを改善できます。

それでも、「大きな」テーブルにインデックスを追加する必要があります。phpmyadminを使用してこれを行います。経験則として:where句の1つまたは複数の列のみにインデックスを付けます(この場合はPostalCodeのみ)

于 2013-03-14T01:16:03.497 に答える
0

最後に、mySQLコマンドラインから直接郵便番号にインデックスを作成しました。

CREATE INDEX postal_index ON postalcode(postalcode);

コードの検索は4.89秒から0.00秒になりました!!!!!!!

于 2013-03-16T17:22:40.437 に答える
0

フィールドにインデックスを追加してPostalCode、パフォーマンスが向上するかどうかを確認します。

私は通常phpMyAdminを使用してインデックスを作成しますが、別の投稿で提案されているようにコマンドラインを使用できます。

于 2013-03-14T01:01:34.003 に答える
0

管理者をチェックしてください。インストールは非常に簡単で、テーブルのインデックスをすばやく変更するために使用できます。

PostalCode にインデックスを作成し、可能であれば PostalCode を主キーにする必要があります。

それでもクエリ時間が長いという問題がある場合は、Innodb_buffer_pool を増やして、完全な郵便番号テーブルを含めるのに十分な大きさにしてみてください。

于 2013-03-14T02:18:09.270 に答える