2011-09-07 64 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