我想知道是否有人可以解释 IN 是如何计算的?好吧,最终我试图找出为什么这个查询很慢以及如何优化它。我等了 3 多分钟,当我取消查询时,它只返回了 1000 行,这似乎不需要那么长时间。
SELECT t2.*
FROM report_tables.roc_test_results as t2
WHERE t2.job IN (SELECT DISTINCT(t1.job)
FROM report_tables.roc_test_results as t1
WHERE t1.operation = 'TEST'
AND result = 'Passed'
AND STR_TO_DATE(t1.date_created,'%d-%M-%Y') BETWEEN '2009-10-01'
AND '2009-10-31')
我不确定总查询应该返回什么,如果我不得不猜测我会说大约 2000 条记录,则子查询返回 332(非 Distinct 时为 336)。
谁能给我一些关于如何优化这个查询的指示?另外,我想知道,子查询是每次计算还是只计算一次并存储它?
根据要求,DESC 的结果...(顺便说一句,请不要笑,我是自学成才的,所以我确信这张桌子设计得很糟糕。)
Field Type Null Key Default Extra
------ ----- ----- --- ------- -----
operation varchar(10) NO
tester varchar(25) NO
result varchar(45) NO
fail_mode varchar(45) NO
primary_failure varchar(25) NO
ref_des varchar(45) NO
rf_hours varchar(15) NO
ac_hours varchar(15) NO
comments text NO
job varchar(15) NO
rma bigint(20) unsigned NO
item varchar(45) NO
item_description text NO
serial varchar(25) NO
created_by varchar(25) NO
collection bigint(20) unsigned NO PRI
date_created varchar(15) NO