ユーザ用ツール

サイト用ツール


データベースを高速化する10_のヒント

データベースを高速化する10 のヒント

データベースを高速化する10 SQLのヒント

1注意してデータベースを設計する

この最初のヒントは明白だが、実際はそのほとんどのデータベースの問題がひどく設計されたテーブルの構造から来ています。

例えば、私はそのようなクライアント情報と支払いが同じデータベースの列の情報などの情報を格納する人々を見てきました。

その上で動作する必要がデータベースのシステムと開発者両方にとって、これは良いことではありません。

データベースを作成するときは、常に、様々なテーブルに情報を置く明確な命名基準を使用して、プライマリを利用して

2あなたが最適化すべきかを知っている

あなたが特定のクエリを最適化する場合は、それはクエリの結果を詳細に調査を得ることができると非常に便利です。~ 使用してEXPLAINの文を、あなたは以下の例に示すように、特定のクエリによって生成される結果に有用な情報の多くを得るでしょう。

EXPLAIN SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table.column;

3最速のクエリは...あなたが送信していないいずれかです

あなたがデータベースにクエリを送信しているたびに、あなたのサーバのリソースのビットを使用している。

これが理由です、高トラフィックの多いサイトで、あなたのデータベースをスピードアップするためにできる最善のことは、キャッシュのクエリにすることです。

ご使用のサーバー上でクエリキャッシュを実装するソリューションがたくさん出ている。ここでいくつかは以下のとおりです。~

ADODB: ADOdbは、PHPのデータベース抽象化ライブラリです。~ それはあなたが選択したデータベースのシステムをする(MySQL、PostgreSQL、Interbaseの、そして多くの方法で)使用することを可能にし、それは速度のために設計されています。

ADODBは、シンプルでありながら強力なキャッシュシステムを提供します。そして最後に、ADODBは、あなたのプロジェクトで自由に使用できることを意味BSD、下でライセンスされています。LGPLライセンスでは、商用プロジェクトでも利用可能です。

memcachedは:

Memcachedは多くの場合、データベースの負荷を軽減することによって、動的なデータベース駆動型Webサイトを高速化するために使用される分散型メモリキャッシュシステムです。

CSQLキャッシュ:CSQL Cacheは、オープンソースのデータキャッシングインフラストラクチャです。個人的にそれをテストしていないが、それは素晴らしいツールのようです絶対に。

4必要のないものを選択しないでください

必要なデータを得ることは非常に一般的な方法は、目的のテーブルからすべてのフィールドを取得する*記号を、使用することです。

SELECT * FROM wp_posts;

その代わり、あなたは間違いなく、次の例に示すように、目的のフィールドだけを選択する必要があります。~ 非常に小さなサイト上で、みましょうと言う、違いをなさない毎分1人のビジター、。~ しかし、そのような猫のコードのようなサイトで、それはデータベースのために多くの作業を保存します。

SELECT title, excerpt, author FROM wp_posts;

5LIMITを使用してください

それはあなたのデータベースからのレコードのみを特定の数を取得する必要があることは非常に一般的です。

例えば、ページあたり10個のエントリが表示されているブログ。その場合、あなたは間違いなくレコードのみの希望数を選択LIMITパラメータを、使用してください。

LIMITがなければ、あなたのテーブルは10万異なるレコードを持っている場合、あなたのサーバの不要な作業である、それらをすべて抽出されます。

SELECT title, excerpt, author FROM wp_posts LIMIT 10;

6ループでクエリを避ける

PHPなどのプログラミング言語と一緒にSQLを使用する場合、それはループ内でSQLクエリを使用したくなることもできます。

これを行うと、クエリを使用してデータベースをハンマーのようなものです。

この例では、問題全体の”ループ内のクエリを”示しています:

foreach ($display_order as $id => $ordinal) {
 $sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id";
 mysql_query($sql);
}

ここでは代わりに何をすべきかです。

UPDATE categories
SET display_order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END
WHERE id IN (1,2,3)

7サブクエリの代わりに結合を使用します

プログラマとして、サブクエリはあなたが使用し、濫用する誘惑に駆られることができるものです。サブクエリは、以下に示すように、非常に便利です。~

SELECT a.id,
(SELECT MAX(created)
FROM posts
WHERE author_id = a.id)
AS latest_post FROM authors a

サブクエリは便利ですが、彼らはしばしば実行する方がずっと速いです結合、に置き換えることができます。

SELECT a.id, MAX(p.created) AS latest_post
FROM authors a
INNER JOIN posts p
ON (a.id = p.author_id)
GROUP BY a.id

8ワイルドカードを使うときは注意してください

データベース内のデータを検索するときには、1つ以上の文字に置き換えることができますので、ワイルドカードは非常に便利です。~ 私はあなたがそれらを使用してはならないこととは言わないよ、その代わりに、あなたは慎重にそれらを使用し、接頭辞や接尾辞のワイルドカードは、~ 同じ仕事をすることができるときは、完全なワイルドカードを使用しないでください。~ 実際には、上で完全なワイルドカード検索を行う万のレコードは確かにあなたのデータベースを殺すでしょう。~

#Full wildcard SELECT * FROM TABLE WHERE COLUMN LIKE '%hello%'; #Postfix wildcard SELECT * FROM TABLE WHERE COLUMN LIKE 'hello%'; #Prefix wildcard SELECT * FROM TABLE WHERE COLUMN LIKE '%hello';

9UNIONの代わりにORを使用してください

次の例では、使用するORの結果を得るために文を。

SELECT * FROM a, b WHERE a.p = b.q or a.x = b.y;

UNIONのステートメントでは、2つ以上の選択クエリの結果セットを組み合わせることができます。~ 次の例は、上記のクエリが取得すると同じ結果を返しますが、それは速くなります。

SELECT * FROM a, b WHERE a.p = b.q 
UNION
SELECT * FROM a, b WHERE a.x = b.y

10インデックスを使用

データベースの索引には、ライブラリで見つけることができるものと同様である:彼らはちょうど図書館の索引と同じように、高速にする要求情報を見つけるために、~ データベースは読者が、彼 らは時間を失うことなく、探しているものを見つけることを可能にすることができます。~ 指数が上に作成することができます単一の列またはデータベーステーブル内の列の組み合わせ。~ テーブルインデックスは、特定の順序でデータベーステーブル内の1つ以上の列の値を配置するデータベース構造です。~

次のクエリは、上にインデックスが作成されますモデルから列品表を。~ インデックスが呼び出されますidxModel。

CREATE INDEX idxModel ON Product (Model);
データベースを高速化する10_のヒント.txt · 最終更新: 2013/12/02 10:54 by luis_lee