mysql大查询无响应

时间:2013-02-27 10:11:30

标签: mysql sql database

我们有大约9万条记录的表格。 我们正在尝试使用大数据执行查询(注意:查询很大)

like <some query> and agt.item in (',productRange,.......<very large data, having around 2 lakh chars>)

有了这个查询失败说语法错误。但是在查询中执行的项目数量较少。 请让我知道如何处理这类问题。

2 个答案:

答案 0 :(得分:3)

大多数DBMS对大型参数列表都很​​糟糕。 所以如果你有一个很大的“IN”列表,例如

SELECT *
FROM   foo
WHERE  bar IN ('1','2','3','4'...,'500000')

与包含您要选择的所有值的表格以及加入两个表格相比,您将获得非常差的性能:

CREATE TABLE baz (
    bar VARCHAR
)

INSERT INTO baz(bar) VALUES ('1');
INSERT INTO baz(bar) VALUES ('2');
INSERT INTO baz(bar) VALUES ('3');
INSERT INTO baz(bar) VALUES ('4');
...
INSERT INTO baz(bar) VALUES ('500000');

SELECT *
FROM   foo,
       baz
WHERE  foo.bar = baz.bar

因此,由于MySQL没有表值参数,最好的办法是将数据存储在临时表中,而不是在查询中输入,并且不要忘记你需要一个关于你要过滤的值的索引on(在你的情况下为agt.item)。

答案 1 :(得分:0)

如果IN子句中的valuesitemsitems来自另一个先前的查询,那么您可能只使用子查询。

假设您当前的代码如下所示:

SELECT some_field FROM table1 WHERE condition1;
-- returns a long list and/or large strings

SELECT * FROM table2 WHERE condition2 AND item IN ( @records_from_previous_query );

您可以将其重写为:

SELECT *
FROM table2
JOIN table1 ON (table1.some_field = table2.item AND condition1)
WHERE condition2