Мне интересно, может ли кто-нибудь объяснить, как рассчитывается 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 (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