Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL缓慢的查询和解释给出了奇怪的答案_Mysql_Optimization - Fatal编程技术网

MySQL缓慢的查询和解释给出了奇怪的答案

MySQL缓慢的查询和解释给出了奇怪的答案,mysql,optimization,Mysql,Optimization,我要加入两张桌子。 表unique核小体约有600000条记录。 另一个表有20000条记录。 奇怪的是性能和解释的答案是不同的 关于WHERE子句中的条件。 那是什么时候 式中,n.染色体='X' 大约花了3分钟。 那是什么时候 其中n.染色体='2L' 花了30多分钟,连接断了 SELECT n.name , t.transcript_start , n.start FROM unique_nucleosome_re AS n INNER JOIN tss_tata_range AS

我要加入两张桌子。 表unique核小体约有600000条记录。 另一个表有20000条记录。 奇怪的是性能和解释的答案是不同的 关于WHERE子句中的条件。 那是什么时候 式中,n.染色体='X' 大约花了3分钟。 那是什么时候 其中n.染色体='2L' 花了30多分钟,连接断了

SELECT n.name , t.transcript_start , n.start
 FROM unique_nucleosome_re AS n 
 INNER JOIN tss_tata_range AS t  
 ON t.chromosome = n.chromosome
 WHERE (t.transcript_start > n.end AND t.ts_minus_250 < n.start )  
       AND n.chromosome = 'X'     
 ORDER BY t.transcript_start
;
当n.染色体的位置为'2L'

'1', 'SIMPLE', 'n', 'ref', 'start_idx,end_idx,chromo_start', 'chromo_start', '17', 'const', '68109', '100.00', 'Using where'
X或2L的记录数几乎相同。 我花了几天的时间,但我想不出来。这可能是一个我看不见的简单错误,也可能是一个bug。
你能帮我吗?

首先,在没有看到任何索引信息的情况下,我会在染色体键和转录本开始处的TSS_TData_范围内设置索引,但最少要有染色体键。我还假设在你唯一的核小体表上有一个染色体索引。然后,TSS似乎是您的短表,所以我将把它移动到查询的第一个位置,并调用STRAIGHT_JOIN子句的用法

SELECT STRAIGHT_JOIN
      n.name, 
      t.transcript_start, 
      n.start  
   FROM 
      tss_tdata_range t,
      unique_nucleosome_re n
   where 
          t.chromosome = 'X'
      and t.chromosome = n.chromosome
      and t.transcript_start > n.end
      and t.ts_minus_250 < n.start
   order by
      t.transcript_start

如果它对您运行良好,我也会对性能感兴趣…

有时优化器出现错误,因此您会得到一些模糊的结果。您能在其他版本上试用吗?我是一个写得很慢的人。幸运的是,我现在没有其他版本了。这是MySQL服务器5.1.49-1ubuntu8.1,您在索引方面是正确的。表中的染色体和WHERE中的其他键都被索引。我试试看,然后告诉你嗯,第一个用了17秒,第二个用了37秒,两个都限制在10秒。在分析之前,我重新启动了服务器,以消除缓存。@在服务器刷新和缓存方面,我有一个很好的观点,但我认为您会发现它对您来说仍然有一定的一致性。。。很高兴能帮助。。。有些人没有意识到STRAIGHT_JOIN可以为您提供的强大功能,特别是如果您了解数据和关系的话……我还了解到,在基数较低的情况下,如本例中,选择数据子集可能会提高性能。e、 g.第一个从将从选择名称开始,从唯一核小体开始,其中染色体='X'作为n。
SELECT STRAIGHT_JOIN
      n.name, 
      t.transcript_start, 
      n.start  
   FROM 
      tss_tdata_range t,
      unique_nucleosome_re n
   where 
          t.chromosome = 'X'
      and t.chromosome = n.chromosome
      and t.transcript_start > n.end
      and t.ts_minus_250 < n.start
   order by
      t.transcript_start