2011-09-07 68 views
1

我有一个〜3M行的表。行为date,time,msec,以及一些其他具有int数据的列。这些行的某些未知部分根据它们在单独的表outages(基于日期范围)中的存在被视为“无效”。mysql/matlab:优化查询 - 从列表中删除日期

当前查询做了一个select *,然后使用一个巨大的WHERE删除无效的日期范围(大量'和非'(RecordDate>'2008-08-05'和RecordDate <'2008-08-10') ') 等等。这吹掉了使用索引的任何机会。

我正在寻找更好的方法来限制结果。现在,查询需要几分钟才能运行。

+0

为什么选择投票?我做错了什么? – ethrbunny

+0

不确定,但有些人坚持在一个问题中看到代码,我想你的特定问题留下太多含糊不清。就我个人而言,在这种情况下我不同意,所以我把它投回到0. – Johan

+0

有些东西可以继续发展。谢谢你的帮助。 – ethrbunny

回答

0
DELETE b FROM bigtable b 
INNER JOIN outages o ON (b.`date` BETWEEN o.datestart AND o.dateend) 
WHERE (1=1) //In some modes MySQL demands a `where` clause or it will not run. 

确保您在查询中涉及的所有字段都有索引。

+0

谢谢。这与我的想法不同。 – ethrbunny

+0

问题:当我在〜2M行的表上使用这种方法时,它需要> 10分钟才能运行。似乎过度。它由您的示例中的RecordDate('date')进行索引。 '中断'表有3行。此外:这句话似乎删除了一切,但什么在'中断'表 - 如果我想相反(保持所有,但'中断')我会改变它'不在'之间? – ethrbunny