1

2 つのテーブルから列を取得する必要があり、INNER JOIN を使用しました。ただし、ページの読み込み中に多くの時間がかかります。同じことを達成するためのより良い、より速い方法はありますか?

P.Col1、P.Col2、P.Col3、P.Col4、P.Col5、C.Col1、C.Col2、C.Col3 を選択します。 Col2 = 5

前もって感謝します。

4

3 に答える 3

0

テーブルに必要なインデックスがあることを確認してください...「経験則」として、検索 ( WHERE) またはデータ結合 ( INNER JOINLEFT JOINRIGHT JOIN) に使用されるすべてのフィールドにインデックスを付ける必要があります。

例: テーブルを作成している場合、その時点でインデックスを追加できます (テーブルには常に主キーが必要であることに注意してください)。

CREATE TABLE myTable (
myId int unsigned not null,
someField varchar(50),
primary key (myId),
index someIdx(someField)
);

ALTERテーブルが既に存在し、インデックスを追加する場合は、次のステートメントを使用する必要があります。

ALTER TABLE myTable
ADD INDEX someIdx(someField),
ADD PRIMARY KEY (myId);

ルール:

  1. インデックスを定義するには、インデックスに一意の名前を付け、インデックスに含まれるフィールドを指定します。INDEX myIndex(field1, field2, ...)

  2. インデックスにはさまざまな種類があります。PRIMARY KEY主キーに使用されます (当然ですね)。INDEX検索と結合操作を高速化するために使用される「通常のインデックス」です。UNIQUE INDEX値の重複を防ぐインデックスです。

推奨事項:

  • 可能な限り、関連するすべての数値フィールドと日付フィールド (ID、生年月日など) にインデックスを付けます。「double」値を含むフィールドにインデックスを作成しないでください。

  • 乱用すると非常に大きなインデックス ファイルが作成される可能性があるため、インデックスを乱用しないでください。

チップ:

  • クエリがどのように実行されるかを確認したい場合は、次のEXPLAINステートメントを使用できます。

    EXPLAIN SELECT a. 、b。FROM a INNER JOIN b on a.myId = b.otherId

この指示により、クエリの実行計画が表示されます。最後の列に「file sort」または「using temporary」と表示されている場合は、追加のインデックスが必要になる場合があります (使用GROUP BYすると、ほとんどの場合「using temporary」メッセージが表示されることに注意してください)。

これがあなたを助けることを願っています

于 2012-06-01T19:05:54.253 に答える
0

DDL を知らなければ、何とも言えません。

ただし、概念的にはこれで問題ありません。適切なインデックス セットがあることを確認してください。

例:(あなたのテーブル名は本当に「Pyalers」ですか?「players」と仮定して)

CREATE INDEX idx_players ON `players` (col1);
CREATE INDEX idx_customers ON `customers` (col1);

2 つのテーブルを結合するために必要な列を使用します。

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

于 2012-06-01T18:14:53.333 に答える
0

正しい方法で行っていますが、テーブルの正しい列にインデックスがない場合、どのサイズのテーブルでも非常に高速にはなりません。Palers.col1 と Customers.col1 の両方にインデックスがありますか?

テーブルがどのように定義されているかを示してください。

于 2012-06-01T18:18:04.667 に答える