2 つのテーブルから列を取得する必要があり、INNER JOIN を使用しました。ただし、ページの読み込み中に多くの時間がかかります。同じことを達成するためのより良い、より速い方法はありますか?
P.Col1、P.Col2、P.Col3、P.Col4、P.Col5、C.Col1、C.Col2、C.Col3 を選択します。 Col2 = 5
前もって感謝します。
2 つのテーブルから列を取得する必要があり、INNER JOIN を使用しました。ただし、ページの読み込み中に多くの時間がかかります。同じことを達成するためのより良い、より速い方法はありますか?
P.Col1、P.Col2、P.Col3、P.Col4、P.Col5、C.Col1、C.Col2、C.Col3 を選択します。 Col2 = 5
前もって感謝します。
テーブルに必要なインデックスがあることを確認してください...「経験則」として、検索 ( WHERE
) またはデータ結合 ( INNER JOIN
、LEFT JOIN
、RIGHT 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);
ルール:
インデックスを定義するには、インデックスに一意の名前を付け、インデックスに含まれるフィールドを指定します。INDEX myIndex(field1, field2, ...)
インデックスにはさまざまな種類があります。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」メッセージが表示されることに注意してください)。
これがあなたを助けることを願っています
DDL を知らなければ、何とも言えません。
ただし、概念的にはこれで問題ありません。適切なインデックス セットがあることを確認してください。
例:(あなたのテーブル名は本当に「Pyalers」ですか?「players」と仮定して)
CREATE INDEX idx_players ON `players` (col1);
CREATE INDEX idx_customers ON `customers` (col1);
2 つのテーブルを結合するために必要な列を使用します。
正しい方法で行っていますが、テーブルの正しい列にインデックスがない場合、どのサイズのテーブルでも非常に高速にはなりません。Palers.col1 と Customers.col1 の両方にインデックスがありますか?
テーブルがどのように定義されているかを示してください。