私はmysqlを初めて使っています。私は50Kの行(70列)を持つ2つの同一のmysqlテーブルを持っています。これらのテーブルは毎日データフィードによって更新されます。交差/減算などのネストされたクエリを実行する必要があります。mysqlの交差問合せのパフォーマンス
私が使用しようとしているクエリの1つは次のとおりです。 しかし、正しく動作しません。 5分かかりますか? 〜10分。 (端末を介して)応答しない。
SELECT *
FROM table1
WHERE table1.sku IN (SELECT t1.sku
FROM ((SELECT DISTINCT sku
FROM table2)
UNION ALL
(SELECT DISTINCT sku
FROM table1)) AS t1
GROUP BY sku
HAVING Count(*) >= 2)
は、どのように私はそれがより速く/正常に動作することができますか?どのようにテーブル/カラム(インデックス、プライマリキーなど)を設定するのですか?あるいは、mysqlサーバ上でチューニングする必要がありますか?
私はいくつかのことを試しました。私はvarchar(75) の列である 'sku'のインデックスを作成しました。私のデータベースサーバーは512MBのメモリを搭載した1つのCoreProcessor(Digital Ocean)サーバー で動作します。
---私が正しく、この特定のクエリを理解していれば、あなたはtable2の中に対応するsku
を持ってTABLE1のすべてのレコードを表示しようとしている
+----+--------------------+-----------------------+-------+---------------+---------+---------+------+-------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-----------------------+-------+---------------+---------+---------+------+-------+---------------------------------+
| 1 | PRIMARY | table1 | ALL | NULL | NULL | NULL | NULL | 30260 | Using where |
| 2 | DEPENDENT SUBQUERY | <derived3> | ALL | NULL | NULL | NULL | NULL | 65677 | Using temporary; Using filesort |
| 3 | DERIVED | table2 | range | NULL | sku_idx | 227 | NULL | 31016 | Using index for group-by |
| 4 | UNION | table1 | range | NULL | sku | 227 | NULL | 30261 | Using index for group-by |
| NULL | UNION RESULT | <union3,4> | ALL | NULL | NULL | NULL | NULL | NULL | |
+----+--------------------+-----------------------+-------+---------------+---------+---------+------+-------+---------------------------------+
のインデックスを持っている場合、これは瞬時に動作するはずです多くのありがとう@Tudor –