ホームページ >バックエンド開発 >PHPチュートリアル >データベースのインデックス作成 1_PHP チュートリアル

データベースのインデックス作成 1_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:26:17751ブラウズ

多くの PHP 開発者と同様に、私が最初に動的 Web サイトを構築し始めたとき、比較的単純なデータ構造を使用しました。確かに、PHP はデータベースに接続するのに非常に便利です (翻訳者注: PHP には、異なるデータベースに接続するときに統一されたインターフェイスがなく、不便だと考える人もいます。実際、これはいくつかの拡張ライブラリを使用して行うことができます)。必要ありません 大量の設計ドキュメントを参照することでデータベースを構築して使用できます。これが PHP の成功の主な理由の 1 つです。
少し前に、かなり上級のプログラマが私にインデックスとは何なのかと尋ねました。私はとても驚きました。何千人もの開発者 (おそらくほとんどが MySQL を使用している) がいるからです。彼らは顧客向けにいくつかの開発を行ってきましたが、データベースの適切なインデックスを構築する方法についてはあまり知識がなかったので、関連する記事を書くことを思いつきました。
最も一般的なケースは、where 句に現れるフィールドのインデックスを構築することです。説明を容易にするために、まず次のような表を作成します。
CREATE TABLE mytable (id シリアル主キー、
) category_id int null デフォルト 0、
では十分ではありません。クエリ時に次のようなステートメントを頻繁に使用する場合:
SELECT * FROM mytable WHERE category_id=1;
これに対処する最も直接的な方法は、category_id の単純なインデックスを作成することです:
CREATE INDEX mytable_categoryid
ON mytable (category_id) ;
はい、終わりましたか?まだ満足していないのですが、選択基準が複数ある場合はどうすればよいでしょうか?例:
SELECT * FROM mytable WHERE category_id=1 AND user_id=2;
最初の反応は、user_id のインデックスを作成することかもしれません。いいえ、これは最適なアプローチではありません。複数のインデックスを作成できます。



私の命名習慣に気づきましたか? 「テーブル名_フィールド1名_フィールド2名」という方法を使います。なぜ私がこんなことをするのかすぐに分かるでしょう。 適切なフィールドにインデックスを作成しましたが、データベースが実際にこれらのインデックスを使用するかどうかが少し心配になるかもしれません。ほとんどのデータベースでは、これは簡単です。EXPLAIN コマンドを使用するだけです:
CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);
EXPLAIN
SELECT * FROM mytable
WHERE category_id=1 AND user_id=2;
これは Postgres 7.1 が返すものです (まさに私が予想したとおりです)
注意: QUERY PLAN:
Index Scan using mytable_categoryid_userid on
mytable (cost=0.00..2.02 rows=1 width=16)
EXPLAIN
上記はpostgresデータで、データベースがクエリされていることがわかります 1つのインデックスが使用されています(良いスタートです)、私が作成した 2 番目のインデックスを使用しています。上記の名前付けの利点を見てください。適切なインデックスが使用されていることがすぐにわかります。




http://www.bkjia.com/PHPjc/531988.html

www.bkjia.com

http://www.bkjia.com/PHPjc/531988.html技術記事多くの PHP 開発者と同様に、私が最初に動的 Web サイトを構築し始めたとき、比較的単純なデータ構造を使用しました。確かに、PHP はデータベースに接続するのに非常に便利です (翻訳者...)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。