问题所在
我正在使用Workbench 5.2.35和MySQL服务器5.5运行一个查询,并且在查询600.516秒之后,我的错误"Error Code: 2013.在查询期间失去了与MySQL服务器的连接“--在查询中也发生了一些小小的更改。查询有两个角色:
第B阶段C**1 *A* *3 *C* *3 *C*A *2 *B*A *7 *C *3 *C*a *8*C*f* *16 *C*b *4 *A*a *9 *C *18 *C*c*c *5 *B*a *16 *C*b *6 *A*g *17 *C*b *7 *C*f *18 *C**c *8 *C*f *9 *C*f *10 *A *11 *B*f *12 *D*f *13 *S*f*F *15 *F*F *16 *C*b *17 *C*b *18 *C*c *
是对:MySQL, select rows where a parameter value depends on the value that it has in a different row的概括
查询是:
SELECT t.id, t.col2, t.col3, t.col4, t.col5 FROM tablename t
WHERE t.id < 1000000
AND t.col1 = 'value1'
AND t.col2 <>
(SELECT col2 FROM tablename
WHERE col1 = 'value1'
AND id > t.id
LIMIT 1);错误的原因
现在,从本文https://serverfault.com/questions/29597/what-does-mysql-error-2013-mean中可以看出,此错误的原因是:
H 118客户端没有足够快地为net_wait_timeout提取数据,并且被杀死H 219G 220
但是,由于查询以600.516秒结束,我想这个例子中的问题是4号(超时)。
可能存在的问题和解决办法
第一个想法是增加wait_timeout时间,但我认为这是由以前的错误触发的:查询只会继续运行,不会返回任何内容。极限t.id < 1000000准确地用于测试有限子集中的查询(数据库有大约2亿个条目),因此,我认为查询中存在一些问题,特别是在阶段B和阶段C之间的段落中(上一步是微不足道的)。
对于错误或查询的任何想法,我们将不胜感激。
谢谢
解决方案
这是工作代码,灵感来自最好的答案。命令的工作不同,但最后我使用了GROUP和ORDER,以便更好地显示结果。
SELECT id, col1, col2, ..., coln FROM tablename
WHERE col1 = 'value1'
AND col2 = 'value2'
...
AND coln = 'valuen'
GROUP BY col2
ORDER BY id;发布于 2011-10-21 13:28:44
SELECT DISTINCT Par FROM table_name
发布于 2011-10-21 10:48:06
我将使用not in重写它,查询优化器有一个特例。
另外,我还会用另一种方法将结果的数量限制在一个。
limit的问题在于,它首先创建了一个临时表,其中包含all结果,而不是从中选择1行。
SELECT t.id, t.col2, t.col3, t.col4, t.col5
FROM tablename t
WHERE t.id < 1000000
AND t.col1 = 'value1'
AND t.col2 NOT IN
(SELECT col2 FROM tablename
WHERE col1 = 'value1'
AND id = t.id+1) <<--- assuming that `id` is the primary key.如果您有一个复合索引on (col1,col2),并且使用id作为主键,则查询不应该永远使用。
查看您的查询,我会将其重写为:
SELECT t.id, t.col2, t.col3, t.col4, t.col5
FROM tablename t
WHERE t.id IN (
SELECT t2.id
FROM tablename t2
WHERE t2.col1 = 'value1'
GROUP BY t.col2)如果我正确地研究了各个阶段,这应该能起作用。
https://stackoverflow.com/questions/7848063
复制相似问题