2
1千万を超える行がある表で問合せを実行する必要があります。 テーブル構造は複数の列の索引付け
user(varchar 100),
played(int 11),
won(int 11),
lost(int 11),
drawn(int 11),
user1(varchar 30),
user2(varchar 30).
Where
User - primary key
user1 - index
user2 - index
MySQLデータベースエンジンはMyISAMテーブルです。
私の問題は - 私は以下のクエリを実行すると17秒以上かかる。
SELECT * FROM h2hstats
WHERE (won+lost+drawn) > 5
AND (user1 = '717054941' OR user2 = '717054941')
この実行時間を短縮するにはどうすればよいですか?
(won + lost + drawn)列で別のインデックスを作成しますか?
ハズレを、あなたがそれらを検索しませんので。条件が満たされると、データにアクセスできます。したがって、user1とuser2の適切なインデックスに依存します。また、数値のみを含む列に数値フィールド型(INTEGERまたはBIGINT)を使用すると、パフォーマンスが向上します。 – syck
このようにする前にこのようなことをしたことはありませんでしたが、これはおそらく次のようになります。 AND 717054941 IN(user1、user2) – Jeff
win + last + drawn ..http://dev.mysql.com/doc/refman/5.7 /en/generated-column-index-optimizations.html..さらに、2つの別々のインデックス(user1、user2)をどのように使用できるか分かりません。 – TheGameiswar