我对mysql很新。我有2个相同的mysql表,每个表有50K行(70列)。这些表每天都通过数据馈送进行更新。我需要执行一些嵌套查询,比如十字路口/减法等。
我尝试使用的其中一个查询如下。 但它没有正常工作。要么需要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服务器上进行任何调整?
我尝试了几件事。我在' sku'上创建了索引。哪个是varchar(75) 列。我的数据库服务器在1个CoreProcessor(数字海洋)服务器上运行 512MB内存。
---查询' EXPLAIN'
+----+--------------------+-----------------------+-------+---------------+---------+---------+------+-------+---------------------------------+
| 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 | |
+----+--------------------+-----------------------+-------+---------------+---------+---------+------+-------+---------------------------------+
答案 0 :(得分:0)
如果我正确理解了这个特定的查询,你试图显示table1中表2中具有相应sku
的所有记录。
这可以通过一个更简单的查询来实现:
SELECT *
FROM table1
WHERE table1.sku IN (SELECT DISTINCT table2.sku FROM table2 )
GROUP BY table1.sku
或者,加入:
SELECT table1.*
FROM table1
INNER JOIN table2 ON table1.sku = table2.sku
GROUP BY table1.sku
如果您在table1.sku
和table2.sku